多拿纸画画 ! ! !
给出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
#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
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;// 不输 赢一次
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章