本文主要是介绍1487 C. Minimum Ties,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意
n支队伍,两两之间有一场比赛,胜利者+3分,平局都+1分,失败+0分,如何构造出每队的得分都相同且让平局的场次尽可能的小
解析
每个人输赢必须相同,因此考虑对半思考问题。
对于队伍数目为 n n n,分类讨论
如果是奇数的个数,那就非常好办了,取窗口大小为 [ n 2 ] [\frac{n}{2}] [2n]向后滑动,处在窗口的前一般部分是失败后一半是胜利
如果是偶数的话,可以让窗口中间的数字平局,前一半失败,后一半的队伍胜利。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;void solve(){int n;cin>>n;if(n%2==0){int mid=n/2;for(int i=1;i<n;i++){for(int j=i+1;j<=n;j++){if(j==i+mid){cout<<0<<" ";}else if(j<i+mid){cout<<1<<" ";}else{cout<<-1<<" ";}}}}else{int v=n/2;//前v个 1 超过V个-1 窗口大小for(int i=1;i<n;i++){for(int j=i+1;j<=n;j++){if(j-i<=v)cout<<1<<" ";else cout<<-1<<" ";}}}puts("");
}
int main(){int t;cin>>t;while(t--){solve();}
}
这篇关于1487 C. Minimum Ties的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!