Educational Codeforces Round 113 (Rated for Div. 2)
阅读原文时间:2023年07月08日阅读:2

多拿纸画画 ! ! !

Problem - B - Codeforces

题意

给出n个数字(数字为1或2), 1代表这第i个选手没有输过,  2代表这第i个选手至少赢一次

输出为n*n矩阵( i行j列) ,   +表示 i 赢了j,   -表示 i 对j输了,   =表示ij平局,   X表示i=j

题解

1表示这个选手没输过, 那就全是=或+, 但是我们还要尽量保证别的是1的选手没输过, 即:

是1的选手统统默认是=

其实1有多少没什么关系, 如图,

对于2, 像这种, 可以让3vs4   4vs5    5vs3, 前者赢. 如3赢了2, (3,2)为+, (2,3)为- , 一对

占两格而对于样例22这种, 只有2个空格, 至少有1个2没有赢过, 对于样例2这种, 只有0个

空格更离谱了, 直接输出NO

AC代码

#include
#include // 不输 赢一次
#include
using namespace std;

string a, s[60];
bool book[60][60];

int main()
{
int t;
cin >> t;
bool flag = 1,f;
while(t --)
{
vector id;
int n;
cin >> n >> a;

    for(int i = 0; i < n; i ++)  
    {  
        s\[i\] = string(n, '=');  
        s\[i\]\[i\] = 'X';  
        if(a\[i\] == '2')    id.push\_back(i);  
    }

    if(id.size() <= 2 && id.size() > 0)  
    {  
        puts("NO");  
        continue;  
    }

    for(int i = 0; i <  id.size(); i ++)  
    {  
        if(i+1 == id.size())  
            s\[id\[i\]\]\[id\[0\]\] = '+', s\[id\[0\]\]\[id\[i\]\] = '-';  
        else  
            s\[id\[i\]\]\[id\[i+1\]\] = '+', s\[id\[i+1\]\]\[id\[i\]\] = '-';  
    }  
    puts("YES");  
    for(int i = 0; i < n;i ++)  
        cout << s\[i\] << endl;

}  
return 0;// 不输   赢一次  

}