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;
}