Chess Tournament(思维题)
题目
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(思维题)相关推荐
- upc Cafebazaar’s Chess Tournament 思维 + FFT
说实话,题我没大读懂. 听zwz大佬说这个题挑战者的两个能力值不能与被挑战者能力值相等,不过可以取实数,所以这句话看没看到都不影响这个思路,因为每个相等的数都可以+0.1或-0.1来实现不相等且不影响 ...
- Chess DP 思维题
車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車--他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻击的方案数.他经过思考,得出了 ...
- CF1569B. Chess Tournament 简单思维
B. Chess Tournament 题意:n个人 每两人间进行一次比赛,结果有胜平负三种.每个人要求1.不负 或2.至少胜一场, 给出n个人的要求(1or2),求能否满足所有人的要求 ...
- kattis Block Game + Chess Tournament + Completing the Square + Millionaire Madness
这几道题都来自同一场比赛,这次把这几道题做一个整理.原题不说了,只说一下个别题的题目大意和思路. A - Block Game 一个玄学的博弈问题,虽然没看懂,但是做出来了. 这里只说一下必胜态,1如 ...
- little w and Soda(思维题)
链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- ZOJ 3829 贪心 思维题
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...
- yoyo思维题(困难) 组合数学
问题 B: yoyo思维题(困难) 时间限制: 1 Sec 内存限制: 256 MB 提交: 11 解决: 3 [提交][状态][讨论版][命题人:qianyouyou][Edit] [TestD ...
- 1884: 三个家庭(思维题)
1884: 三个家庭 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 244 Solved: 81 [Submit][Status][Web Board] ...
- 思维题 UVA 10881 Piotr's Ants
题目传送门 1 /* 2 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 3 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 4 关键2:蚂蚁的相对位置 ...
最新文章
- Shell中NR/NF的意义
- 读史记晋国世家0808:春秋平头哥
- C++ 类访问控制(public/protected/private)
- Linux下修改IP
- nyoj-488 素数环 +nyoj -32 组合数 (搜索)
- 使用npm uninstall卸载express无效
- C#与.NET Framework c#编程语言,和java是一样的。(c#,java) --javaweb,asp.net
- EOS钱包、账号及其关系详解
- 云计算技术与应用 - 了解认识云计算
- 机器学习 笔记04 ---决策树(DT):理论+代码实现
- 伊诺ET-33夹式校(音器吉他/贝司/小提琴/尤克里里 使用
- 拉钩招聘信息爬取以及可视化
- Word2010版 ,每页上下都有一根粗黑线,但是不是页眉或页脚的下框线,怎么删除?
- Week4—A—DDL的恐惧
- 开启hadoop之旅的大门–安装配置篇
- Unity实现动作游戏的技能系统(Ability System)设计原型
- “夜游+”可为文旅带来哪些发展?深圳光语数字
- java内存泄漏怎么检测_JAVA内存泄漏原因和内存泄漏检测工具
- Kazam 简洁的linux 录屏软件
- Python自学之路第十八步——异常