链接
题意:
比赛有三种情况,赢了,输了,平局。
两种情况:
- 没有输过
- 赢过
X表示自己与自己打
+表示赢了
-表示输了
=表示平局
分析:
其实我们通过题意提取一下就能得到,
- 如果只有一个人赢过,其他人都是没有输过肯定是不行的。
- 同样两个人赢过,其他人没有输过也不行。
- 三个或者三个以上,直接让赢过的人收尾相邻赢就好了。
- 都是没有输过的,就除了自己跟自己 ,都是平局
void solve()
{
cin>>n;
for(int i=0;i<=n;i++) a[i]=0;
cin>>str;
str=" "+str;
ll sum=0;
for(int i=1;i<=n;i++){
if(str[i]=='2'){
a[sum]=i;sum++;
}
}
if(sum==1||sum==2) puts("NO");
else {
puts("YES");
ll num=0;
for(int i=1;i<=n;i++){
if(str[i]=='1'){
for(int j=1;j<=n;j++){
if(j==i) cout<<"X";
else cout<<"=";
}
cout<<endl;
}else {
for(int j=1;j<=n;j++){
if(j==i) cout<<"X";
else if(str[j]=='1'){cout<<"=";}
else if((a[(num+1)%sum])==j){
cout<<"+";
}else if(a[(num-1+sum)%sum]==j){
cout<<"-";
}else cout<<"=";
}
cout<<endl;
num++;
}
}
}
}