Codeforces1487 C. Minimum Ties(数学,构造)

题意:

在这里插入图片描述

解法:

设 x 为 胜 利 次 数 , y 为 平 局 次 数 , 因 为 所 有 队 分 数 相 同 , 那 么 有 : x + y = n ∗ ( n − 1 ) 2 , 3 x + 2 y = k n , 解 得 : x = n ∗ ( k − n + 1 ) , y = n ∗ ( 3 n − 3 2 − k ) , 当 n 为 奇 数 时 , 令 k = 3 n − 3 2 , 此 时 平 局 次 数 最 少 , 即 每 支 队 伍 胜 利 n − 1 2 次 , 平 局 0 次 . 当 n 为 偶 数 时 , 令 k = 3 n − 4 2 , 此 时 平 局 次 数 最 少 , 即 每 支 队 伍 胜 利 n − 2 2 次 , 平 局 1 次 . 设x为胜利次数,y为平局次数,因为所有队分数相同,\\ 那么有:x+y=\frac{n*(n-1)}{2},3x+2y=kn,\\ 解得:x=n*(k-n+1),y=n*(\frac{3n-3}{2}-k),\\ 当n为奇数时,令k=\frac{3n-3}{2},此时平局次数最少,\\ 即每支队伍胜利\frac{n-1}{2}次,平局0次.\\ 当n为偶数时,令k=\frac{3n-4}{2},此时平局次数最少,\\ 即每支队伍胜利\frac{n-2}{2}次,平局1次. x,y,,:x+y=2n(n1),3x+2y=kn,:x=n(kn+1),y=n(23n3k),n,k=23n3,,2n1,0.n,k=23n4,,2n2,1.

code:

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n;
void solve(){
    
    
    cin>>n;
    if(n%2==1){
    
    
        int win=(n-1)/2;
        for(int i=1;i<=n;i++){
    
    
            int cnt=0;
            for(int j=i+1;j<=n;j++){
    
    
                cnt++;
                if(cnt<=win)cout<<1<<' ';
                else cout<<-1<<' ';
            }
        }
    }else{
    
    
        int win=(n-2)/2;
        for(int i=1;i<=n;i++){
    
    
            int cnt=0;
            for(int j=i+1;j<=n;j++){
    
    
                cnt++;
                if(cnt<=win)cout<<1<<' ';
                else if(cnt==win+1)cout<<0<<' ';
                else cout<<-1<<' ';
            }
        }
    }
    cout<<endl;
}
signed main(){
    
    
    ios::sync_with_stdio(0);
    int T;cin>>T;
    while(T--){
    
    
        solve();
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44178736/article/details/114123003