https://codeforces.com/problemset/problem/1487/C
C. Minimum Ties
题意:现有n支队伍比赛,每支队伍都会跟另一只队伍比赛一次,结果可能是赢,平,或者输。赢得+3分,平的各+1分,输的不加分。现在要自己设计每个队跟另一个队比赛的结果,问在所有队伍的分值都一样的前提下,使得平局的次数尽可能的小,输出该方案。
思路:如果n是奇数,那么每支队伍都跟另外n -1支队伍比赛,直接一赢一输即可。如果n是偶数,那么久每支队伍在参赛过程中,只打成一次平局,这样总的分数就是 3 * n * (n - 1) / 2 - n / 2 = 3 * n * (n - 2) / 2,这样的分数仍能够被n整除,所以只要保证每个队伍只平局一次即可,其他的一赢一输跟奇数一样设计即可,最简单的方法,就是把所有的队伍想成一个环,每个队伍都跟环的正对面的队伍平局一次,这样可以直接按距离来判定,当前的比赛是否该平局了。
总结:奇数的可以想到如何处理,对于偶数的,没想到总分值被n整除这个概念...还有就是,关于平局如何设计的问题
inline void solve() {
int n;
cin >> n;
if (n & 1) {
for (int i = 0; i < n; ++i) {
int now = 1;
for (int j = i + 1; j < n; ++j) {
cout << now << ' ';
now *= -1;
}
}
cout << '\n';
}
else {
for (int i = 0; i < n; ++i) {
int now = 1;
for (int j = i + 1; j < n; ++j) {
if (j - i == n / 2){
cout << 0 << ' ';
}
else {
cout << now << ' ';
now *= -1;
}
}
}
cout << '\n';
}
}

浙公网安备 33010602011771号