1 条题解

  • 0
    @ 2025-7-2 19:43:34

    贪心解决

    #include <bits/stdc++.h>
    using namespace std;
    int n,a[1001],t[4],c[4][4],ans;
    int main()
    {
        cin>>n;
        for (int i=1;i<=n;i++) cin>>a[i],t[a[i]]++;
        for (int i=1;i<=t[1];i++) c[1][a[i]]++;
        for (int i=t[1]+1;i<=t[1]+t[2];i++) c[2][a[i]]++;
        //统计个数
        ans=c[1][2]+c[1][3];//把1换到正确位置的最少步数
        c[2][3]+=max(0,c[2][1]-c[1][2]);//有多少3被交换到了二位置
        ans+=c[2][3];//将2,3交换到正确位置
        cout<<ans;
        return 0;
    }
    
    • 1

    信息

    ID
    450
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    (无)
    递交数
    54
    已通过
    25
    上传者