@2368860385
2018-07-05T06:12:34.000000Z
字数 1016
阅读 205
http://codeforces.com/contest/990
codeforces
考试完成
A:模拟
B:模拟
C:模拟计数,统计左括号多x的个数,右括号同理,当前左括号多x,+cntr[x]
D:特判
E:调和级数,枚举k即可,验证是否可行(复杂度nlojn,类似于nlogn求素数)
F:
G:
代码T4:
int n = read(),a = read(),b = read();
if (n==1) {
if (a==1&&b==1) printf("YES\n0");
else printf("NO");
return 0;
}
if (n==2) {
if (a==1 && b==2) { printf("YES\n01\n10"); }
else if (a==2 && b==1) printf("YES\n00\n00");
else printf("NO");
return 0;
}
if (n==3) {
if (a==1 && b==3) printf("YES\n011\n101\n110");
else if (a==1 && b==2) printf("YES\n001\n001\n110");
else if (a==2 && b==1) printf("YES\n001\n000\n100");
else if (a==3 && b==1) printf("YES\n000\n000\n000");
else printf("NO");
return 0;
}
if (b >= 2 && a!=1) {printf("NO");return 0;}
if (a==1) {
printf("YES\n");
for (int i=1; i<=(n-b); ++i) mp[i][i+1] = mp[i+1][i] = 1;
for (int i=1; i<=n; ++i) {
for (int j=1; j<=n; ++j)
if (i!=j)printf("%d",!mp[i][j]);
else printf("0");
printf("\n");
}
}
if (a >= 2) {
if (b != 1) printf("NO");
else {
printf("YES\n");
for (int i=1; i<=(n-a); ++i) mp[i][i+1] = mp[i+1][i] = 1;
for (int i=1; i<=n; ++i) {
for (int j=1; j<=n; ++j)
printf("%d",mp[i][j]);
printf("\n");
}
}
}