zoukankan      html  css  js  c++  java
  • P2882 [USACO07MAR]Face The Right Way G

    首先我们需要枚举(K),对每个(K)我们都要从最左端开始来考虑(N)头牛的情况,此时最坏情况下需要进行(N-K+1)次反转操作,而每次操作又要反转(K)头牛,于是总的复杂度为(O(N^3))

    对区间反转的部分考虑使用差分,每次只修改(i sim i+k−1),通过前缀和求解每一位是否反转。

    反转奇数次使方向相反,偶数次使方向不变。最后的总复杂度是(O(n^2))

    const int N=5010;
    int cow[N];//1:F, 0:B
    int b[N];
    int n;
    
    int solve(int k)
    {
        memset(b,0,sizeof b);
    
        int res=0;
        for(int i=1;i+k-1<=n;i++)
        {
            b[i]+=b[i-1];
            if((cow[i]+b[i]) % 2 == 0)
            {
                res++;
                b[i]++;
                b[i+k]--;
            }
        }
    
        for(int i=n-k+2;i<=n;i++)
        {
            b[i]+=b[i-1];
            if((cow[i]+b[i]) % 2 == 0)
                return INF;
        }
        return res;
    }
    
    int main()
    {
        cin>>n;
    
        for(int i=1;i<=n;i++)
        {
            char c;
            cin>>c;
            if(c == 'B') cow[i]=0;
            else cow[i]=1;
        }
    
        int resk=0,resm=INF;
        for(int i=1;i<=n;i++)
        {
            int step=solve(i);
            if(step < resm)
            {
                resk=i;
                resm=step;
            }
        }
    
        cout<<resk<<' '<<resm<<endl;
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    软件工程实践总结-黄紫仪
    beta冲刺总结附(分工)-咸鱼
    beta冲刺总结-咸鱼
    beta冲刺7-咸鱼
    beta冲刺用户测评-咸鱼
    beta冲刺6-咸鱼
    beta冲刺5-咸鱼
    beta冲刺4-咸鱼
    beta冲刺3-咸鱼
    beta冲刺2-咸鱼
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14560031.html
Copyright © 2011-2022 走看看