洛谷 2882[USACO] Face The Right Way 智商题(尺取法)
来源:互联网 发布:图片纠偏软件 编辑:程序博客网 时间:2024/06/05 00:31
题目:
https://www.luogu.org/problem/show?pid=2882;
调了两天,因为在第23行,n写成了i;
QAQ~~~~~~~~
1:F;
0:B;
枚举k判断;
从左向右:遇到0就改为1,这样可以保证1~n-k+1均为1;
再判断n-k+2~n是否有0,有0就false,
复杂度O(n^3);
显然吃力;
有O(n^2)的做法;
f[i]:表示给i~i+k-1 翻转;
sum:后面的奶牛需要翻转几次;
注意给sum更新;
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN=200001;int n,a[MAXN],f[MAXN];int ans=2147483647,num,tot,sum;bool pd(int k){ sum=0,tot=0; memset(f,0,sizeof(f)); for(int i=1;i<=n-k+1;i++) { if((sum%2==1 && a[i]==1) || (sum%2==0 && a[i]==0))//如果本为0,翻转偶数次 或 本为1,翻转奇数次,都会变为0,需要翻转; { f[i]=1; tot++; } sum+=f[i];//后面的奶牛需要翻转次数 if(i-k+1>=0) sum-=f[i-k+1];//i-k+1~i已翻完 } for(int i=n-k+2;i<=n;i++) { if((sum%2==1 && a[i]==1) || (sum%2==0 && a[i]==0)) return false; if(i-k+1>=0) sum-=f[i-k+1]; } return true;}void solve(){ cin>>n; for(int i=1;i<=n;i++) { char c; cin>>c; if(c=='F') a[i]=1; } for(int i=1;i<=n;i++) { if(pd(i) && tot<ans) { ans=tot; num=i; } } cout<<num<<" "<<ans<<endl;}int main(){ solve(); return 0;}
阅读全文
1 0
- 洛谷 2882[USACO] Face The Right Way 智商题(尺取法)
- POJ3276 Face The Right Way 【尺取法】
- POJ - 3276/USACO - Mar07 Gold Face The Right Way 尺取法+反转
- POJ Face The Right Way(尺取法+贪心)
- POJ 3276 Face The Right Way (常用技巧-尺取法)
- Face The Right Way
- Face The Right Way
- Face The Right Way
- POJ - 3276 Face The Right Way (尺取)
- poj3276 Face the Right Way
- POJ3276-Face The Right Way
- POJ3276-Face The Right Way
- POJ3276-Face The Right Way
- Face The Right Way POJ
- POJ3276 Face The Right Way
- poj3276 Face The Right Way
- poj3276:Face The Right Way
- poj 3276--Face The Right Way(反转)
- HEVC代码学习29:getDistPart函数
- ResourceManager(二)—— AssetInfoManager
- redis的主从复制+高可用简单部署
- Codeforces Round #437B,C,D,E题目详解
- python print a+=1 报错
- 洛谷 2882[USACO] Face The Right Way 智商题(尺取法)
- 【C++】动态二维数组的创建
- C++模板:函数模板和模板函数
- 《文献管理与信息处理》 2.简易信息聚合--RSS
- HDU
- ajax同步请求执行顺序
- 各大网站CSS样式初始化、
- 插入排序
- oracle connect by用法篇