hihoCoder 1114 小Hi小Ho的惊天大作战:扫雷·一
2015-08-03 20:46
435 查看
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N = 100005; int mine1 ,mine2 ; int val ; int ans1 ,ans2 ; int n; bool flag1,flag2; void solve() { flag1 = flag2 = true; mine1[1] = 1; mine2[1] = 0; for(int i = 2; i <= n; i++) { if(flag1) { mine1[i] = val[i - 1] - mine1[i - 1] - mine1[i - 2]; if(mine1[i] != 0 && mine1[i] != 1) flag1 = false; } if(flag2) { mine2[i] = val[i - 1] - mine2[i - 1] - mine2[i - 2]; if(mine2[i] != 0 && mine2[i] != 1) flag2 = false; } } if(val != mine1[n - 1] + mine1 ) flag1 = false; if(val != mine2[n - 1] + mine2 ) flag2 = false; }; int main(){ int T; scanf("%d",&T); while(T--){ memset(mine1,0,sizeof(mine1)); memset(mine2,0,sizeof(mine2)); scanf("%d",&n); for(int i = 1; i <= n; i++) scanf("%d",&val[i]); solve(); int cnt1 = 0,cnt2 = 0; if (flag1 && flag2){ for(int i = 1; i <= n; i++) if (mine1[i] == 1 && mine2[i] == 1) ans1[cnt1++] = i; else if (mine1[i] == 0 && mine2[i] == 0) ans2[cnt2++] = i; } else if(flag1){ for(int i = 1; i <= n; i++) if (mine1[i] == 1) ans1[cnt1++] = i; else ans2[cnt2++] = i; } else{ for(int i = 1; i <= n; i++) if(mine2[i] == 1) ans1[cnt1++] = i; else ans2[cnt2++] = i; } printf("%d", cnt1); for (int i = 0; i < cnt1; i++) printf(" %d", ans1[i]); printf("\n%d", cnt2); for (int i = 0; i < cnt2; i++) printf(" %d", ans2[i]); printf("\n"); } return 0; }
相关文章推荐
- JIURL玩玩Win2k进程线程篇 PEB
- QEvent整理归纳:140种类型,29个继承类,7个函数,3种事件来源
- [leedcode 198] House Robber
- HUD1.2.4 Nasty Hacks
- 膜拜大神
- 黑马程序员——Java基础---网络编程
- hdu1518(Square)深搜+剪枝
- DFS POJ 3087 Shuffle'm Up
- 20150803工作日志
- UISwitch
- 文件上传和下载(转)
- 黑马程序员---iOS基础---OC中的ARC、分类、block
- 实际用户ID,有效用户ID及设置用户ID
- linux 实际用户ID、有效用户ID以及保存的设置用户ID
- 南阳 oj 重建二叉树 题目756
- 离线下载的免费网站
- hdoj 1241 Oil Deposits
- java中添加了jtable组件,却显示不出来
- bootstrap组件
- SX学SX内容 笔记?