zoukankan      html  css  js  c++  java
  • 【BZOJ】1704: [Usaco2007 Mar]Face The Right Way 自动转身机

    【题意】n头牛,一些向前一些向后,每次可以使连续k头牛转身,求使旋转次数最小的k。

    【算法】贪心

    【题解】这题题解很迷,大概思想是k没有单调性,故枚举k,从左到右扫描遇到一只向后的牛就旋转一次。

    贪心正确性易证:旋转前面已经好的显然不可能更优,故往后旋转。

    然后还有结尾不足k头牛算错……为什么?不知道。

    实际数据好像k是有单调性的,可能数据太水。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=5010;
    
    bool a[maxn],b[maxn];
    int cnt,n,ans;
    char s[10];
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%s",s);
            if(s[0]=='F')a[i]=0;else a[i]=1;
        }
        for(int k=n;k>=1;k--){
            bool ok=1;
            int p=0;cnt=0;
            for(int i=1;i<=n;i++)b[i]=0;
            for(int i=1;i<=n;i++){
                p^=b[i];
                if(p^a[i]){
                    if(i+k-1>n){ok=0;break;}
                    p^=1;b[i+k]^=1;cnt++;
                }
            }
            if(ok){ans=k;break;}
        }
        printf("%d %d",ans,cnt);
        return 0;
    }
    View Code
  • 相关阅读:
    TUN/TAP区别
    从日志文件解决ArcGIS Server性能低下问题的步骤(1)
    java异常
    Maven
    前车之鉴-web篇
    图论复习总结
    奇(qi)谋(ji)巧(yin)计(qiao)
    莫比乌斯反演呓语
    学习后缀数组笔记
    浅读叶青学长竞赛学习知识目录
  • 原文地址:https://www.cnblogs.com/onioncyc/p/7603511.html
Copyright © 2011-2022 走看看