题目
思路
每两个人之间都会进行一场比赛,可以建图,n个顶点,每两个顶点之间进行连线。 假设n为奇数,那么与偶数个线相连。这时候平分输赢不就好了吗?
也就是顺时针数n/2个顶点都是赢,剩余的都是输。这样不会重复。理由:某个点,之前的n/2个点相比他都是输的,这时候剩余的不就是顺时针相距小于等于n/2的点吗?
假设n是偶数,那么奇数条边,这时候把对角线定为平局即可。
总体来说,n为奇数顺时针相距n/2的为胜,剩余的为负。 偶数把n/2这个点单独拿出来为平局即可。
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<queue>
#include<map>
#include<cstdio>
#include<cmath>
#include<stdlib.h>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int maxn = 1e6+50;
int ans[105];
int main(){
int t;
cin >> t;
while(t--){
int n;
cin >> n;
if(n%2 == 0){
for(int i = 1;i <= n/2-1;i++) ans[i] = 1;
ans[n/2] = 0;
for(int i = n/2+1;i <= n-1;i++) ans[i] = -1;
}
else if(n%2 == 1){
for(int i = 1;i <= n/2;i++) ans[i] = 1;
for(int i = n/2+1;i <= n-1;i++) ans[i] = -1;
}
for(int i = 1;i <= n;i++)
for(int j = i+1;j <= n;j++) printf("%d ",ans[j-i]);
puts("");
}
return 0;
}