poj3276 反转 挑战程序设计竞赛
2018-02-10 13:50
302 查看
2018-2-8
翻转奇数次与翻转一次的效果是一样的,
翻转偶数次与不翻转的效果是一样的。
假设我们已知k的大小了,那么我们至少需要多少次操作呢?对于第一个奶牛来说,如果它的方向不正确,它只能由以第一个为首的连续的k个数的翻转来改变,这样我们可以依次往下看。。。
TLE的问题还未解决。。。
可以在翻转这上面进行处理,如果说某一个的翻转为奇数次,那么就等同于翻转一次,如果说翻转偶数次,那么就等同于不进行翻转。
翻转奇数次与翻转一次的效果是一样的,
翻转偶数次与不翻转的效果是一样的。
假设我们已知k的大小了,那么我们至少需要多少次操作呢?对于第一个奶牛来说,如果它的方向不正确,它只能由以第一个为首的连续的k个数的翻转来改变,这样我们可以依次往下看。。。
TLE的问题还未解决。。。
可以在翻转这上面进行处理,如果说某一个的翻转为奇数次,那么就等同于翻转一次,如果说翻转偶数次,那么就等同于不进行翻转。
#include<iostream> #include<cstring> using namespace std; const int N = 5000; bool x[N+2],y[N+2]; int n,k,m; int turn(int p){ int cnt=0; memcpy(y,x,sizeof(x)); for (int i=1;i<=n-p+1;i++){ if (y[i]){ for (int j=0;j<p;j++){ y[i+j]=!y[i+j]; } cnt++; if (cnt>=m) return N; } } for (int i=n-p;i<=n;i++){ if (y[i]) return -1; } return cnt; } int main(){ while (cin>>n){ char t; for (int i=1;i<=n;i++){ cin>>t; if (t=='B') x[i]=1; else x[i]=0; } k=N;m=N; for (int i=1;i<=n;i++){ int now=turn(i); if (now!=-1&&now<m){ k=i;m=now; } } cout<<k<<" "<<m<<endl; } return 0; }
相关文章推荐
- poj3279 反转 <挑战程序设计竞赛>
- 挑战程序设计竞赛2 数据结构与算法学习笔记
- 划分数-dp-挑战程序设计竞赛
- 挑战编程 程序设计竞赛训练手册-1.6.8 澳大利亚投票(Australian Voting)
- 大背包问题(挑战程序设计竞赛)
- 挑战程序设计竞赛:0101抽签
- ACM Stall Reservations(挑战程序设计竞赛)
- ACM Packets(挑战程序设计竞赛)
- [挑战程序设计竞赛] AOJ 0118 - Property Distribution
- 水洼 POJ2386 挑战程序设计竞赛
- POJ 2991 Crane 线段树+计算几何 出自“挑战程序设计竞赛”
- poj2431 Expedition (优先队列) 挑战程序设计竞赛
- poj2393 其它贪心 <挑战程序设计竞赛>
- poj3320 尺取法 <挑战程序设计竞赛>
- 挑战程序设计竞赛:三角形
- 挑战程序设计竞赛 4.4常用技巧(二)
- poj1182食物链_并查集_挑战程序设计竞赛例题
- 挑战程序设计竞赛 POJ 1192食物链 带权并查集,略麻烦
- 挑战程序设计竞赛 3.3 活用各种数据结构
- 挑战程序设计竞赛 3.6 与平面和空间打交道的计算几何