POJ 3276 Face The Right Way 开关问题
来源:互联网 发布:物流网络存在的问题 编辑:程序博客网 时间:2024/05/18 08:46
反转问题,WA了无数次了,简直欲哭无泪。。技巧是求定长子段和,区间标记。构造定长前缀和函数来判断到第i头牛时该头牛的状态。优化后的代码如下:
/*Memory 144K Time 407MS*/#include <cstdio>#include <iostream>#include <cstring>using namespace std;int N;const int MAXN = 5000;bool dir[MAXN+1], f[MAXN+1];int calc(int K){ memset(f, 0, sizeof(f)); int res = 0; bool sumi = 0; int i; for(i=0; i+K-1<N; i++){ if((sumi+dir[i])%2 != 0){ res++; f[i] = 1; } if(i-K+1 < 0) sumi = (sumi + f[i])%2; else sumi = (sumi + f[i] - f[i-K+1] + 2)%2; } for( ; i<N; i++){ if((sumi+dir[i])%2 != 0){ return -1; } sumi = (sumi - f[i-K+1] + 2)%2; } return res;}void solve(){ int K = 1, M = N; //放缩 for(int k=1; k<=N; k++){ int m = calc(k); if(m >= 0 && m < M){ M = m; K = k; } } printf("%d %d\n", K, M);}int main(){ while(scanf("%d", &N) != EOF){ char ch; int cnt = 0; while(cnt < N){ scanf("%c", &ch); if(ch == 'F') dir[cnt++] = 0; if(ch == 'B') dir[cnt++] = 1; } solve(); } return 0;}如果把第一段分成两个for循环写也是可以过的:
for(i=0; i-K+1<0 && i+K-1<N; i++){ //必须加此边界,否则要跪,之前一直都没找出这个bug,WA了好多 if((sumi+dir[i])%2 != 0){ res++; f[i] = 1; } sumi = (sumi+f[i])%2;} for( ; i+K-1<N; i++){ if((sumi+dir[i])%2 != 0){ res++; f[i] = 1; } sumi = (sumi + f[i] - f[i-K+1] + 2)%2;}另外,再附上我找这个bug的测试程序
#include <cstdio>#include <iostream>using namespace std;int N;void f1(int K){ int i; for(i=0; i-K+1<0; i++){ cout<<"a"; } for( ; i+K-1<N; i++){ cout<<"b"; } cout<<endl;}void f2(int K){ int i; for(i=0; i+K-1<N; i++){ if(i-K+1 < 0) cout<<"a"; else cout<<"b"; } cout<<endl;}int main(){ int K; cin>>N>>K; f1(K); f2(K); return 0;}
0 0
- 【POJ】POJ 3276 Face The Right Way (开关问题)
- POJ 3276 Face The Right Way 开关问题
- Face The Right Way poj 3276 开关问题
- poj 3276 Face The Right Way【开关问题】
- POJ 3276 Face The Right Way(开关问题)
- POJ - 3276 Face The Right Way(开关问题)
- poj 3276Face The Right Way—反转(开关问题)
- POJ 3276 Face The Right Way 反转(开关问题)
- POJ 3276:Face The Right Way (开关问题)
- poj 3276 Face The Right Way(开关问题)
- POJ 3276 Face The Right Way【开关问题】
- POJ 3276 Face The Right Way——开关问题
- Face The Right Way poj ( 开关问题)
- POJ 3276 Face The Right Way(开关转换)
- pOJ 3276 Face The Right Way【思维 反转开关】
- 反转(开关)问题(Face the right way POJ NO.3276)
- POJ 3276 Face The Right Way (开关问题的优化_好题)
- 150_反转(开关问题) Face the right way (POJ No.3276)
- 排序算法
- 查找算法
- Eclipse中10个最有用的快捷键组合
- CSS3 @font-face详细用法local
- C++线程 -- boost::barrier解决多线程分工问题
- POJ 3276 Face The Right Way 开关问题
- css 控制文字位置
- css背景图与html插入img的区别
- 邀请大家试用我的创业产品
- hdu1406完数,区间左右在没注明大小的情况下要注意
- 图片和span水平垂直居中问题(主要解决小图标+文字水平垂直居中的问题)
- JavaScript经典代码【一】【DIV+CSS解决IE6,IE7,IE8,FF兼容问题】
- pojTest for Job
- wiki Oi题解