题目

Chess Tournament


问题描述

有nnn个人参加比赛,两两之间进行对决,每两个人之间都会进行一次比赛;
对决有三种结果:要么胜,要么败,要么平。

选手有两种策略:
第一种:全场不败,稳扎稳打;
第二种:但求一胜,败局不论。

在选手给出自己选择的策略后,问是否存在一种局面使得所有选手都满足自身策略。

若不存在,则输出"NO";
若存在,则输出"YES",并以n∗nn*nn∗n的矩阵输出结果。

∗*∗,表示自己与自己对决;
+++,表示行序号代表的选手赢了列序号代表的选手;
−-−,表示行序号代表的选手输给了列序号代表的选手;
===,表示行序号代表的选手与列序号代表的选手打平


分析

先分析两种策略,
策略一,表示对决结果只能为胜利或平局;
策略二,表示允许失败和平局,但至少赢一局。

对于采取策略一的选手来说,对决结果可以为胜利或平局,但为了不对采取策略二的选手造成影响,将他们的对局情况都安排为平局是最好的。

对于采取策略二的选手来说,他们与采取策略一的选手对决结果此时满足平局,所以他们的胜局必须要依靠同样采取策略二的选手:
当采取策略二的人数为0时,和和气气,大家都是平局,满足条件;
当采取策略二的人数只有一个人时,这位选手找不到同样采取策略二的对手,所以不存在;
当采取策略二的人数为两个人时,两个人之间只会对决一次,一战定胜负,无法双赢,从而必有一人无法满足策略二,所以不存在;
当采取策略二的人数大于二时,可以进行相互成全,让每个采取策略二的人都获得一次胜利(这也许就是演戏吧),满足条件。

之后我们按这个模拟一下即可,先将策略一的选手的情况的安排好,再处理选择策略二的选手,给他们安排好一次胜局后,就可以把他其余还没有结果的比赛都安排为负局。

代码

#include <bits/stdc++.h>
using namespace std;
int t;
int n;
string s;
char a[55];
char b[55][55];
int main(){cin>>t;while(t--){cin>>n;memset(b,0,sizeof b);int a1=0,a2=0;cin>>s;for(int i=1;i<=n;i++){a[i]=s[i-1]-'0';b[i][i]='X';if(a[i]==1)a1++;else a2++;}if(a2==2||a2==1){cout<<"NO"<<endl;continue;}cout<<"YES"<<endl;for(int i=1;i<=n;i++){if(a[i]==1){for(int j=1;j<=n;j++){if(j==i)continue;b[i][j]=b[j][i]='=';}}}for(int i=1;i<=n;i++){int ans=0;if(a[i]==2){for(int j=1;j<=n;j++){if(j==i)continue;else if(b[i][j]=='+'&&ans==0)ans=1;else if(!b[i][j]&&ans==0){b[i][j]='+';b[j][i]='-';ans=1;}else if(!b[i][j]&&ans==1){b[i][j]='-';b[j][i]='+';}}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<<b[i][j];}cout<<endl;}}return 0;
}

Chess Tournament(思维题)相关推荐

  1. upc Cafebazaar’s Chess Tournament 思维 + FFT

    说实话,题我没大读懂. 听zwz大佬说这个题挑战者的两个能力值不能与被挑战者能力值相等,不过可以取实数,所以这句话看没看到都不影响这个思路,因为每个相等的数都可以+0.1或-0.1来实现不相等且不影响 ...

  2. Chess DP 思维题

    車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車--他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻击的方案数.他经过思考,得出了 ...

  3. CF1569B. Chess Tournament 简单思维

    B. Chess Tournament​​​​​​​ 题意:n个人 每两人间进行一次比赛,结果有胜平负三种.每个人要求1.不负 或2.至少胜一场, 给出n个人的要求(1or2),求能否满足所有人的要求 ...

  4. kattis Block Game + Chess Tournament + Completing the Square + Millionaire Madness

    这几道题都来自同一场比赛,这次把这几道题做一个整理.原题不说了,只说一下个别题的题目大意和思路. A - Block Game 一个玄学的博弈问题,虽然没看懂,但是做出来了. 这里只说一下必胜态,1如 ...

  5. little w and Soda(思维题)

    链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  6. ZOJ 3829 贪心 思维题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...

  7. yoyo思维题(困难) 组合数学

    问题 B: yoyo思维题(困难) 时间限制: 1 Sec  内存限制: 256 MB 提交: 11  解决: 3 [提交][状态][讨论版][命题人:qianyouyou][Edit] [TestD ...

  8. 1884: 三个家庭(思维题)

    1884: 三个家庭 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 244 Solved: 81 [Submit][Status][Web Board] ...

  9. 思维题 UVA 10881 Piotr's Ants

    题目传送门 1 /* 2 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 3 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 4 关键2:蚂蚁的相对位置 ...

最新文章

  1. Shell中NR/NF的意义
  2. 读史记晋国世家0808:春秋平头哥
  3. C++ 类访问控制(public/protected/private)
  4. Linux下修改IP
  5. nyoj-488 素数环 +nyoj -32 组合数 (搜索)
  6. 使用npm uninstall卸载express无效
  7. C#与.NET Framework c#编程语言,和java是一样的。(c#,java) --javaweb,asp.net
  8. EOS钱包、账号及其关系详解
  9. 云计算技术与应用 - 了解认识云计算
  10. 机器学习 笔记04 ---决策树(DT):理论+代码实现
  11. 伊诺ET-33夹式校(音器吉他/贝司/小提琴/尤克里里 使用
  12. 拉钩招聘信息爬取以及可视化
  13. Word2010版 ,每页上下都有一根粗黑线,但是不是页眉或页脚的下框线,怎么删除?
  14. Week4—A—DDL的恐惧
  15. 开启hadoop之旅的大门–安装配置篇
  16. Unity实现动作游戏的技能系统(Ability System)设计原型
  17. “夜游+”可为文旅带来哪些发展?深圳光语数字
  18. java内存泄漏怎么检测_JAVA内存泄漏原因和内存泄漏检测工具
  19. Kazam 简洁的linux 录屏软件
  20. Python自学之路第十八步——异常

热门文章

  1. nginx配置Router
  2. 模拟集成电路设计学习笔记(一)IC617工艺库安装
  3. 当程序员还是香!2022年全球程序员收入报告出炉,首席工程师最高超700万!
  4. 科学史上最伟大的十位单身科学家
  5. 那计算机的发展基础是什么呢,计算机的基础
  6. 煤炭价格预测:基于matlab的时间序列分析(主要流程+完整代码)
  7. 字符串拆分以及合并--Python
  8. 数据响应式的原理(简单理解 为了面试)
  9. 【高德地图进阶】--- 3d城市版块之prism
  10. Python - 获取当前目录/上级目录/上上级目录