CF 1569 B. Chess Tournament(思维)

链接

题意:

比赛有三种情况,赢了,输了,平局。
两种情况:

  1. 没有输过
  2. 赢过

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值