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';
    }
}
posted @ 2025-12-13 09:32  _Yxc  阅读(7)  评论(0)    收藏  举报