连连看 赛码网 1175
来源:互联网 发布:c语言教学视频哪个好 编辑:程序博客网 时间:2024/06/07 02:36
喜欢做这种和游戏有关的题目 觉得像打游戏一样有趣
题目链接http://acm.acmcoder.com/showproblem.php?pid=1175
#include <iostream>#include <cstdio>using namespace std;int map[1005][1005];int main(){ int m,n; bool flag1,flag2,flag3; freopen("in.txt","r",stdin); scanf("%d%d",&m,&n); while(m!=0&&n!=0) { for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) scanf("%d",&map[i][j]); int c; scanf("%d",&c); for(int i=0;i<c;i++) { int x1,y1,x2,y2; scanf("%d%d%d%d",&x1,&y1,&x2,&y2); bool ans = 0; if(map[x1][y1]!=map[x2][y2]||map[x1][y1]==0||map[x2][y2]==0) //两次点击的图案不同或者图案为空白则不能被消去 { ans=0; printf("NO\n"); continue; } int minx,maxx; if(x1>x2) { maxx=x1; minx=x2; } else{ minx=x1; maxx=x2; } int miny,maxy; if(y1>y2) { maxy=y1; miny=y2; } else{ miny=y1; maxy=y2; } if(x1==x2) //只需要连一条线的情况 { ans=1; for(int j=miny+1;j<maxy;j++) { if(map[x1][j]!=0) { ans=0; break; } } if(ans==1) { printf("YES\n"); continue; } } if(y1==y2) { ans=1; for(int j=minx+1;j<maxx;j++) { if(map[j][y1]!=0) { ans=0; break; } } if(ans==1) { printf("YES\n"); continue; } } int ex; if(x1>x2) { ex=x1; x1=x2; x2=ex; ex=y1; y1=y2; y2=ex; } for(int i=1;i<=m;i++)//竖横竖三条连线的情况 flag1是横线 flag2 flag3分别是两条竖线 { flag1 = 1; for(int j=miny+1;j<maxy;j++)// 画横线 { if(map[i][j]!=0) { flag1=0; break; } } if(flag1==1) //存在横线的时候才考虑竖线 { flag2=1; //画x1y1到达横线的竖线 if(i>x1)//因为横线可能在两点之上 中间 或者两点之下 所以竖线的起始终止坐标要分情况讨论 { for(int j=x1+1;j<=i;j++) if(map[j][y1]!=0) { flag2=0; break; } } else //i==x1的这种情况也包括在内 也就是两条线的情况 { for(int j=i;j<x1;j++) if(map[j][y1]!=0) { flag2=0; break; } } flag3=1; //画x2y2到横线的竖线 if(i>x2) { for(int j=x2+1;j<=i;j++) { if(map[j][y2]!=0) { flag3=0; break; } } } else { for(int j=i;j<x2;j++) { if(map[j][y2]!=0) { flag3=0; break; } } } if(flag2==1&&flag3==1)//三条线同时存在才可以消去 { ans=1; break;//只要找到这样的连线就确定可以消去 } } } if(ans==1) { // printf("heng---%d%d%d",flag1,flag2,flag3); printf("YES\n"); continue; } if(y1>y2) { ex=x1; x1=x2; x2=ex; ex=y1; y1=y2; y2=ex; } for(int i=1;i<=n;i++) //横竖横的情况 { flag1 = 1; for(int j=minx;j<=maxx;j++)//画竖线 { if(map[j][i]!=0) { flag1=0; break; } } if(flag1==1) { flag2=1; if(i>y1)//横线1 { for(int j=y1+1;j<=i;j++) if(map[x1][j]!=0) { flag2=0; break; } } else { for(int j=i;j<y1;j++) if(map[x1][j]!=0) { flag2=0; break; } } flag3=1; if(i>y2)//横线2 { for(int j=y2+1;j<=i;j++) { if(map[x2][j]!=0) { flag3=0; break; } } } else { for(int j=i;j<y2;j++) { if(map[x2][j]!=0) { flag3=0; break; } } } if(flag2==1&&flag3==1) { ans=1; break; } } } // printf("shu---%d%d%d",flag1,flag2,flag3); if(ans==1) printf("YES\n"); else printf("NO\n");//所有情况都不可能才输出no } scanf("%d%d",&m,&n); } return 0;}
0 0
- 连连看 赛码网 1175
- hdoj 1175-连连看
- hdu 1175 连连看
- hdu 1175 连连看
- hdu 1175 连连看
- HDU 1175 连连看
- HDU 1175 ( 连连看 )
- hdu 连连看 1175
- hdu 1175 连连看
- hdu 1175连连看
- HDU 1175 连连看
- hdu 1175 连连看
- HDU 1175 连连看
- 1175 连连看
- HDU 1175 连连看
- HDU 1175 连连看
- HDU 1175 连连看
- hdu 1175 连连看
- HDU 1114.Piggy-Bank【背包问题(DP)】【4月24】
- HDU 1266 Reverse Number(模拟or数字字符串)
- 亲爱的!直接建此类传一个URL即可得到json串非常方便
- Android存储选择
- Git的使用
- 连连看 赛码网 1175
- 北京林业大学“计蒜客”杯程序设计竞赛 D. A letter from Chensg
- PHP数组学习笔记
- nodejs小问题:[1]express不是内部或外部命令
- 用EL表达式获取List<Map<String,Object>>里面的值
- 面试题12:打印1到最大的n位数
- C++ 学习基础篇(一)—— C++与C 的区别
- HM编码器代码阅读(23)——参数集的熵编码
- 143. Reorder List