vijosP1016 北京2008的挂钟
2016-03-30 17:24
531 查看
vijosP1016 北京2008的挂钟
题目链接:https://vijos.org/p/1016
【思路】
Dfs。
对操作搜索更加优秀,所以采用搜索每一个操作的使用次数,因为操作数为4则相当于没有操作,所以枚举上限为3。
【代码】
题目链接:https://vijos.org/p/1016
【思路】
Dfs。
对操作搜索更加优秀,所以采用搜索每一个操作的使用次数,因为操作数为4则相当于没有操作,所以枚举上限为3。
【代码】
1 #include<iostream> 2 #include<cstdlib> 3 #include<cstring> 4 using namespace std; 5 6 int op[9][9]={ {1,1,0,1,1,0,0,0,0}, 7 {1,1,1,0,0,0,0,0,0}, 8 {0,1,1,0,1,1,0,0,0}, 9 {1,0,0,1,0,0,1,0,0}, 10 {0,1,0,1,1,1,0,1,0}, 11 {0,0,1,0,0,1,0,0,1}, 12 {0,0,0,1,1,0,1,1,0}, 13 {0,0,0,0,0,0,1,1,1}, 14 {0,0,0,0,1,1,0,1,1} }; 15 const int maxn = 10; 16 int cnt[maxn],a[maxn],tmp[maxn]; 17 18 void dfs(int d) { 19 memcpy(&tmp,&a,sizeof(a)); 20 21 for(int i=0;i<9;i++) 22 for(int j=0;j<9;j++) 23 { 24 tmp[i]=(tmp[i]+op[j][i]*cnt[j])%4; 25 } 26 bool f=true; 27 for(int i=0;i<9;i++) if(tmp[i]) {f=false; break; } 28 if(f) { 29 for(int i=0;i<9;i++) //9 30 for(int j=0;j<cnt[i];j++) 31 cout<<i+1<<" "; 32 exit(0); 33 } 34 if(d==9) return ; 35 36 for(int i=0;i<4;i++) { 37 cnt[d]=i; 38 dfs(d+1); 39 } 40 } 41 42 int main() { 43 ios::sync_with_stdio(false); 44 for(int i=0;i<9;i++) cin>>a[i]; 45 46 dfs(0); 47 48 return 0; 49 }
相关文章推荐
- vijosP1164 曹冲养猪
- vijosP1447 开关灯泡
- vijosP1319 数列
- vijosP1359 Superprime
- vijosP1223麦森数
- vijosP1543 极值问题
- vijosP1115 火星人
- vijosP1137 组合数
- MacPorts卡在"正在运行软件包脚本"解决方法
- mysql常见的运算符及使用
- 4_01 计算组合数(函数)
- linux的nohup命令的用法
- maven 资料
- 2875: [Noi2012]随机数生成器
- 对象转JSON注意点
- 分段和分页
- iOS摄像头和相册-UIImagePickerController-浅析
- Mac OS X 的文件系统
- NOIP2005 过河
- NOIP2005 篝火晚会