赞
踩
Codeforces Round #644 (Div. 3) 参赛人数20688
[codeforces 1360E] Polygon 自底向上,自右向左分析
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址http://codeforces.com/contest/1360/problem/D
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
E - Polygon | GNU C++17 | Accepted | 30 ms | 0 KB |
样例模拟如下
- 4
- 001(正下方有1)0
- 001(右边有1)1
- 0000
- 0000
- 输出YES
-
-
- 2
- 1(右边无1,正下方无1)0
- 01
- 输出NO
-
- 2
- 00
- 00
- 输出YES
-
- 4
- 0101
- 1111
- 0101
- 0111
- 输出YES
-
-
- 4
- 0100
- 111(右边无1,正下方无1)0
- 0101
- 0111
- 输出NO
一开始想多了,其实,该题还是比较简单的,具体思路,可结合上述样例,以及代码进行研究,注意n==1时要特判,输出YES
AC代码如下
- #include <stdio.h>
- char a[55][55];
- int main(){
- int t,n,i,j;
- scanf("%d",&t);
- while(t--){
- scanf("%d",&n);
- for(i=1;i<=n;i++)
- scanf("%s",a[i]+1);
- if(n==1){printf("YES\n");continue;}//特判
- int flag=0;
- for(i=n-1;i>=1;i--){
- for(j=n-1;j>=1;j--)
- if(a[i][j]=='1'){
- if(a[i+1][j]=='1')flag=1;//a[i][j]的正下方
- else if(a[i][j+1]=='1')flag=1;//a[i][j]的右边
- else {flag=0;break;}
- }
- if(a[i][j]=='1'&&!flag)break;
- }
- if(a[i][j]=='1'&&!flag)printf("NO\n");//a[i][j]的正下方,右边,无1,无所依托,输出NO
- else printf("YES\n");
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。