UVA519拼图游戏
来源:互联网 发布:64码高清网络电视apk 编辑:程序博客网 时间:2024/06/10 12:42
这题刚开始不懂题意,不懂样例怎么回事,只能百度看别人了,代码看懂了才理解样例怎么回事,原来输入的n,m是指拼图,不是指
拼好的图的行列数,而是指拼图的个数,这题直接爆搜肯定不行,要加剪枝,主要就是剪枝怎么加,先判断每面的F是否等于每面的长,
和每面的O和I是否匹配。然后爆搜判断是否相匹配就行。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>#include<set>#include<cmath>#include<climits>#include<vector>#include<cfloat>#include<queue>#include<cctype>#include<cstdlib>#include<string>#define LL long longusing namespace std;int n,m;string a[50],b[10][10];int l,num[40];bool Possible(int x,int y,int i){ if(x==1&&a[i][0]!='F') return 0; if(x==n&&a[i][2]!='F') return 0; if(y==1&&a[i][3]!='F') return 0; if(y==m&&a[i][1]!='F') return 0; if(x!=1&&a[i][0]=='F') return 0; if(x!=n&&a[i][2]=='F') return 0; if(y!=1&&a[i][3]=='F') return 0; if(y!=m&&a[i][1]=='F') return 0; if(b[x-1][y][2]=='I'&&a[i][0]!='O') return 0; if(b[x-1][y][2]=='O'&&a[i][0]!='I') return 0; if(b[x][y-1][1]=='I'&&a[i][3]!='O') return 0; if(b[x][y-1][1]=='O'&&a[i][3]!='I') return 0; return 1;}bool dfs(int x,int y){ if(y==m+1) return dfs(x+1,1); if(x==n+1) return 1; for(int i=0;i<l;i++) { if(num[i]&&Possible(x,y,i)) { b[x][y]=a[i]; num[i]--; if(dfs(x,y+1)) return 1; b[x][y]="0000"; num[i]++; } } return 0;}bool Pan(){ int k[4][2]={0},kk[4]={0}; for(int i=0;i<n*m;i++) { for(int j=0;j<4;j++) { if(a[i][j]=='I') k[j][0]++; if(a[i][j]=='O') k[j][1]++; if(a[i][j]=='F') kk[j]++; } } if(k[0][0]!=k[2][1]||k[0][1]!=k[2][0]) return 0; if(k[1][0]!=k[3][1]||k[1][1]!=k[3][0]) return 0; if(kk[0]!=m||kk[2]!=m) return 0; if(kk[1]!=n||kk[3]!=n) return 0; return 1;}int main(){ while(cin>>n>>m&&n+m) { memset(num,0,sizeof(num)); for(int i=0;i<n*m;i++) cin>>a[i]; if(!Pan()) { // cout<<"hehe"<<endl; cout<<"NO"<<endl; continue; } sort(a,a+n*m); l=1;num[0]=1; for(int i=1;i<n*m;i++) { if(a[i]!=a[i-1]) { num[l]=1; a[l++]=a[i]; } else num[l-1]++; } if(dfs(1,1)) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0;}
0 0
- UVA519拼图游戏
- UVA519
- 拼图游戏
- 拼图游戏
- 拼图游戏
- 拼图游戏
- 拼图游戏
- 拼图游戏
- 拼图游戏
- 拼图游戏
- 拼图游戏
- 拼图游戏
- 拼图游戏
- 拼图游戏
- 拼图游戏
- 拼图游戏~~~
- 拼图游戏
- 拼图游戏
- node项目上线配置流程
- Franklin let me know
- 0 or 1(最短路转化)
- android自定义控件
- WSGI规范细则
- UVA519拼图游戏
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
- UITableView的cell自适应高度
- [Django数据库模型]创建我们第一个Django模型
- 类和对象
- 用CocoaPods做iOS程序的依赖管理
- 机房收费系统——测试计划
- 磁盘高速缓存
- UVa147 Dollars