Educational Codeforces Round 104 (Rated for Div. 2) C. Minimum Ties

题目

在这里插入图片描述
链接

思路

每两个人之间都会进行一场比赛,可以建图,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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值