Educational Codeforces Round 113 (Rated for Div. 2) B. Chess Tournament(思维 构造)

简介: Educational Codeforces Round 113 (Rated for Div. 2) B. Chess Tournament(思维 构造)

linkk

题意:

n个人,每个人都要与其他人比赛;

a i = 1:所有的比赛都不能输(只能平局或赢)

a i = 2 :所有的比赛至少赢得一场

思路:

对于a i = 1的人来说,可以将他和其他人的比赛都构造成平局

对于a i = 2的人来说,只需要把这些人单独记录下来,每次让他赢得他的下一个人,也就是输给上一个人,这样就能保证赢一局。

要注意如果a i = 1 ∣ ∣ 2的时候,说明无论如何也赢不了,应该输出N O

代码:

int a[110];
char s[110][110];
int main(){
  int _=read;
  while(_--){
    int n=read,cnt=0;
    vector<int>v;
    map<int,int>mp;
    for(int i=1;i<=n;i++){
      scanf("%1d",&a[i]);
      if(a[i]==1) cnt++,mp[i]=1;
      else v.push_back(i);
    }
    if(v.size()==2||v.size()==1){
      puts("NO");continue;
    } 
    puts("YES");
    int idx=0,m=v.size();
    for(int i=1;i<=n;i++){
      if(a[i]==1){//如果这个人不能输
        for(int j=1;j<=n;j++){
          if(i==j) cout<<"X";
          else cout<<"=";//所有的都输出平局
          if(j==n) puts("");
        }
      }
      else{
        for(int j=1;j<=n;j++){
          if(i==j) cout<<"X";
          else if(a[j]==1) cout<<"=";//和不能输的人比,都是平局
          else if((v[(idx+1)%m])==j) cout<<"+";//一直都是赢下一个
          else if(v[(idx-1+m)%m]==j) cout<<"-";//输给上一个
          else cout<<"=";//其余都是平局
          if(j==n) puts(""),idx++;
        }
      }
    }
  }
  return 0;
}
目录
相关文章
Educational Codeforces Round 113 (Rated for Div. 2)A. Balanced Substring
Educational Codeforces Round 113 (Rated for Div. 2)A. Balanced Substring
60 0
|
人工智能 Windows
Educational Codeforces Round 113 (Rated for Div. 2) C - Jury Meeting (思维 组合数)
Educational Codeforces Round 113 (Rated for Div. 2) C - Jury Meeting (思维 组合数)
72 0
|
机器学习/深度学习 人工智能 BI
Educational Codeforces Round 115 (Rated for Div. 2) D. Training Session(组合数学 思维)
Educational Codeforces Round 115 (Rated for Div. 2) D. Training Session(组合数学 思维)
82 0
|
机器学习/深度学习 Java
codeforces Educational Codeforces Round 49 (Rated for Div. 2) C题
刚开始拿到这题很懵逼,知道了别人的思路之后开始写,但是还是遇到很多坑,要求求P2/S最大。p=a b。就是求(a2+ b2 +2ab)/ab最大,也就是a/b +b/a最大。那么题意就很明显了。
87 0