UVa 1418 - WonderTeam

传送门

UVa 1418 - WonderTeam

题意

有N个队比赛,每个队之间比两次,胜者3分,平一分,失败没分。如果一个队最多胜,最多赢球,最少输球就是梦之队,求最低排名。

思路

借鉴了他人的思路。

要求最低排名,就是要赢得越少越好,输得越多越好。

所以假设梦之队赢了两场,其他的队都赢一场,都赢在梦之队上。

队伍 胜场
梦之队 2 n - 1 n - 3
两个队 1 1 2n - 4
其他队 1 0 2n - 3

梦之队总得分 n + 3

两个队(如果队伍总数>=3)得分2n

其他队 2n - 1。

然后就可以算出排名了。

代码

#include<bits/stdc++.h>
#define LL long long
#define lowbit(x) ((x) & (-x))
#define MP(a, b) make_pair(a, b)
const int MAXN = 1000 + 5;
const int INF = 0x3f3f3f3f;
using namespace std;
 
typedef pair<int, int> pii;
typedef vector<int> vei;
typedef vector<pair<int, int> >veii;
typedef vector<int>::iterator viti;
typedef vector<pii>::iterator vitii;
typedef priority_queue<pii, vector<pii>, greater<pii> >pquii;
 
int main()
{
    int n, i, j;
    while (scanf("%d", &n), n)
    {
        if (n <= 3) printf("1\n");
        else if (n <= 4) printf("2\n");
        else printf("%d\n", n);
    }
    return 0;
}

Powered by Jekyll and Theme by solid