UVA1418-WonderTeam(推理+贪心)

题目链接

题意:有n支队伍比赛,每两支队伍打两场(主客场各一次),胜得3分,输不得分,平得1分。比赛结束之后会评选出一个梦之队,它满足如下条件:进球总数最多(不能并列),胜利场数最多(不能并列),丢球总数最少(不能并列)。求梦之队的最低可能排名。一支得分为p的球队的排名等于等分严格大于p的球队的个数加1.

思路:其实3个限定条件只有胜利场数最多有用,因为梦之队可以在胜利场次大比分获胜,输的比赛都是1:0负于对手,其他两个就无关紧要了。要让梦之队排名尽量低,也就意味着让其得分尽量低。那么我们假设梦之队的胜利场数为2,其他球队的胜利场数都为1,那么满足了上述条件,也让梦之队的得分尽量低。

当参赛球队为n支时的战绩及分数:

梦之队:胜2场,负n-1,平n-3 = 2*3+n-3 = 3+n

其中2支球队:胜1场,负1场,平2*n-4 = 1*3+2*n-4 = 2*n-1

剩余队伍(当n>3时存在剩余队伍):胜1场,负0场,平2*n-3 = 2*n

所以根据分数可以得出排名。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int main() {
    int n;
    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;
}

UVA1418-WonderTeam(推理+贪心)

时间: 2024-10-12 20:18:57

UVA1418-WonderTeam(推理+贪心)的相关文章

UVALive - 4094 WonderTeam (贪心)

题目大意: 有n支队伍,每两支队伍打两场比赛(主客场各一次),胜得3分,平得1分,输不得分,比赛结束之后会评选出一个梦之队,梦之队满足以下条件:进球总数最多,胜利场数最多,丢求总数最少,三个都不能并列,求梦之队的最低排名 解析来自:https://blog.csdn.net/l123012013048/article/details/44001543 分析 1.让梦之队的胜利场的进球总数达到无穷大(当然这是不可能的),输的场都是进0球对方队伍进1球,平的场都是0:0的得分,这样即使梦之队只赢一场

【推理,贪心】UVa 1319 - Maximum

看到了大神的代码.理解了好久...真是差距. 题意:给出m, p, a, b,然后xi满足已下两个公式, 求 xp1 + xp2 +...+ xpm 的最大值. 1.-1/sqrt(a) <= xi <= sqrt(a); (a>0) 2.x1+x2+...+xm = b*sqrt(a); 注意:p为偶数. 解题思路:因为p为偶数,所以sqrt(a)和-1/sqrt(a)的p次方都为正数且sqrt(a) > 1/sqrt(a).所以贪心思想时尽量先取sqrt(a);当已经取的xi的

UVA-1614 Hell on the Markets(贪心+推理) (有待补充)

题目大意:一个整数序列a,1≤a[i]≤i.问能否通过在一些元素前加上负号,使得整个序列和为0. 题目分析:贪心.贪心策略:每次都先选最大的元素加负号(或保留,不加负号). 贪心依据:对于1≤a[i]≤i,1~sum[i]总能表示出来.   贪心依据证明:用数学归纳法证明,当i=1时,显然成立.假设当i=k时,也成立.当i=k+1时,(先证明到这儿,有空再补). 代码如下: # include<iostream> # include<cstdio> # include<cst

UVA - 1611 Crane 推理 + 贪心

题目大意:输入一个1-n的排列,要求经过操作将其变换成一个生序序列.操作的规则如下 每次操作时,可以选一个长度为偶数的连续区间,交换前一半和后一半 提示:2n次操作就足够了 解题思路:这句提示是关键,2n次操作,表明每个数最多只需要两次操作. 应该从左到右依次操作过去,先将前面的数安定好了,就可以不用管前面的数了 假设操作到第i个位置,而i这个数刚好在pos这个位置上,现在就要判断一下能否直接将pos上的i经过操作调到i这个位置上 如果 i + (pos - i) * 2 - 1 <= n 就表

UVA - 1614 Hell on the Markets 贪心+推理

题目大意:给出n个数字,第i个数字的大小满足 1 <= ai <= i,要求确定每个数的正负号,使得所有数的总和为0 解题思路:总和为0,那sum % 2 == 0 接着分析一下,因为和为0,所以sum / 2要能通过这n个数得到,那就枚举看看能不能得到 从大到小枚举,取当前这个数的个数和(sum/当前这个数)的值的最小值,接着sum减去这个最小值乘于当前值 如果(sum/当前这个数)是取得的最小值,那么分两种情况 一种是能除尽的,那么(sum - 最小值 * 当前这个数)就刚好为0了,也就是

HDU 4932 Miaomiao&#39;s Geometry(推理)

HDU 4932 Miaomiao's Geometry 题目链接 题意:给定x轴上一些点(不重复),现在要选一个线段,使得能放进这些区间中,保证线段不跨过点(即线段上只能是最左边或最右边是点),并且没有线段相交,求能放进去的最大线段 思路:推理一下,只有两点之间的线段,还有线段的一半可能符合题意,然后对于每种线段,去判断一下能不能成功放进去,这步用贪心,优先放左边,不行再放右边 代码: #include <cstdio> #include <cstring> #include &

贪心算法——Huffman 压缩编码的实现

1. 如何理解 "贪心算法" 假设我们有一个可以容纳 100 Kg 物品的背包,可以装各种物品.我们有以下 5 种豆子,每种豆子的总量和总价值都各不相同.怎样装才能让背包里豆子的总价值最大呢? 这个问题其实很简单,我们只需要计算出每种豆子的单价,然后按照单价从高到低依次来装就好了.单价从高到低排列为:黑豆.绿豆.红豆.青豆和黄豆,因此我们往背包里装 20 Kg 黑豆.30 Kg 绿豆和 50 Kg 红豆. 实质上,这就是贪心算法的思想,用贪心算法解决问题的步骤一般是这样的. 第一步,当

【动态规划、贪心】剪绳子

题目 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m]可能的最大乘积是多少? 例如,当绳子的长度是8时,我们把它剪成长度分别为2.3.3的三段,此时得到的最大乘积是18. 输入描述: 输入一个数n,意义见题面.(2 <= n <= 60) 示例1 输入 8 输出 18 示例2 输入 4 输出 4 解答 1,动态规划,从上往下分析问题,从下往上求解:T

【uva 1615】Highway(算法效率--贪心 区间选点问题)

题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到一个个区间,这样就是选最小的点覆盖所有的区间的问题了.我之前的一篇博文有较详细的解释:关于贪心算法的经典问题(算法效率 or 动态规划).代码实现我先空着.挖坑~