题目链接

题意

n只队伍,两两之间会进行比赛,赢平输都有相应得分,所有比赛结束后,前m名可以晋级。问最大的不能晋级分数为多少,以及最小的能晋级的分数。

分析

智商题。。。按照要求来贪心
1.没有晋级的队伍最高分
将队伍分为两堆,分别为m+1,n-m-1;令第m+1个队伍就是没晋级分数最高的队伍
第m+1个人与第二堆里面的队伍的n-m-1场比赛中得分要么每场都赢,要么每场都平局
即第m+1个人的得分: (n-m-1)*max(a, b);
贪心的让第一堆的分数高,要使第m+1个队伍就是没晋级分数最高的队伍,有两种可能
(1)第一堆m场比赛中所有队伍中每个队伍赢得场数和输的场数基本相同
即第m+1个人得分 : m/2a+m/2c,即m/2*(a+c);
(2)第一堆m场比赛中所有队伍都平局
即第m+1个人得分: m/2b+m/2b,即m/2*(b+b);
与第一堆的比赛得分取以上两场比赛的最大值
即:max(m/2(a+c),m/2(b+b));
第一堆的m场比赛有可能是奇数场也有可能是偶数场,如果是奇数场那么第m+1个人的得分还得加上最后一场的得分,第一堆的最后一场比赛有可能输也有可能平局(不能赢,如果赢了那这个队就有可能比前m-1个队伍分高,就应该晋级),所以得分为max(b, c);
最终第m+1个人的得分为:
x = (n-m-1)max(a, b)+max(m/2a+m/2c,m/2b+m/2*b)
如果m为奇数x+= max(b, c);否则为x;
2.晋级的队伍最低分
将队伍分为两堆,分别为m-1,n-m+1;令第m个队伍就是晋级分数最低的队伍
第m个人与第一堆里面的队伍的m-1场比赛中得分要么每场都输,要么每场都平局
即第m个人的得分: (m-1)*min(c, b);
贪心的让第二堆的分数低,要使第m个队伍就是晋级分数最低的队伍,有两种可能
(1)第二堆n-m场比赛中所有队伍中每个队伍赢得场数和输的场数基本相同
即第m个人得分 : (n-m)/2a+(n-m)/2c,即(n-m)/2*(a+c);
(2)第一堆n-m场比赛中所有队伍都平局
即第m个人得分: (n-m)/2b+(n-m)/2b,即(n-m)/2*(b+b);
与第一堆的比赛得分取以上两场比赛的最小值
即:min((n-m)/2(a+c),(n-m)/2(b+b));
第二堆的n-m场比赛有可能是奇数场也有可能是偶数场,如果是奇数场那么第m个人的得分还得加上最后一场的得分,第一堆的最后一场比赛有可能赢也有可能平局(不能输,如果输的话,那该队得的分数就比第二堆其他队的分数低就不能晋级了),所以得分为min(b, a);
最终第m个人的得分为:
x = (m-1)min(c, b)+min((n-m)/2(a+c),(n-m)/2*(b+b))
如果n-m为奇数x+= min(b, a);否则为x;

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdlib>
#include<climits>
#include<ctype.h>
#include<set>
#include<map>
#define pi acos(-1.0)
#define mem(a) memset(a,0,sizeof(a))
#define mems(a,b) memset((a),(b),sizeof(a))
#define ll long long
#define ull unsigned long long
#define ls root<<1
#define rs root<<1|1
#define Ls root<<1,l,mid
#define Rs root<<1|1,mid+1,r
#define pb push_back
using namespace std;
const int maxn=+;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+; int main()
{
//freopen("data","r",stdin);
int t,cas=;
ll n,m,win,ping,lose;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&n,&m);
scanf("%lld%lld%lld",&win,&ping,&lose); if(lose > win) swap(win,lose); ll big=max(win,ping);
ll small=min(lose,ping);
ll top,below; top=big*(n-m-)+max(m/*ping+m/*ping,m/2LL*win+m/2LL*lose);
if(m%2LL==1LL)
top+=max(ping,lose); below=small*(m-)+min((n-m)/*min(win,ping)+(n-m)/*min(win,ping),(n-m)/2LL*win+(n-m)/2LL*lose);
if((n-m)%2LL==1LL)
below+=min(ping,win); printf("Case #%d: %lld %lld\n",cas++,top,below);
}
return ;
}

UVALive - 7147 (数学)的更多相关文章

  1. UVALive 7147 World Cup(数学+贪心)(2014 Asia Shanghai Regional Contest)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...

  2. UVALive 7147 World Cup

    https://icpcarchive.ecs.baylor.edu/index.phpoption=com_onlinejudge&Itemid=8&page=show_proble ...

  3. ACM学习历程—UVALive 7147 World Cup(分类讨论 && 贪心)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  4. UVaLive 7500 Boxes and Balls (数学)

    题意:给定 n 个球,每次从每篮子里拿出来一个放在一个新篮子里,并移除相同的,按球的个数进行排序,问你用最多几个球能完成循环. 析:数学问题,很容易发现前n项和就是最多的球数,所以我们只要找最大的n项 ...

  5. UVALive 5058 Counting BST 数学

    B - Counting BST Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit S ...

  6. UVaLive 6628 Grachten (水题,数学)

    题意:给定一个平面图形并且且给了几条连,求一条. 析:简单么,三角形相似,很简单就AC. 代码如下: #pragma comment(linker, "/STACK:1024000000,1 ...

  7. UVaLive 6862 Triples (数学+分类讨论)

    题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...

  8. UVaLive 7362 Farey (数学,欧拉函数)

    题意:给定一个数 n,问你0<= a <=n, 0 <= b <= n,有多少个不同的最简分数. 析:这是一个欧拉函数题,由于当时背不过模板,又不让看书,我就暴力了一下,竟然A ...

  9. UVaLive 7359 Sum Kind Of Problem (数学,水题)

    题意:给定一个n,求前 n 个正整数,正奇数,正偶数之和. 析:没什么好说的,用前 n 项和公式即可. 代码如下: #pragma comment(linker, "/STACK:10240 ...

随机推荐

  1. wamp升级php5.3.10到5.4.31版本

    wamp升级php5.3.10到5.4.31版本 1.  停止WAMP服务器. 2.  去网站windows.php.net 下载php-5.4.31-nts-Win32-VC9-x86.zip. 不 ...

  2. centos7 修改网络配置问题

    ip adr 查看ip 查看报错详细信息 journalctl -xe 查看网络故障命令 cat /var/log/messages |grep network 报错现象 Error: Connect ...

  3. as_matrix、保存训练模型

    #-*- coding: utf-8 -*- #构建并测试CART决策树模型 import pandas as pd #导入数据分析库 from random import shuffle #导入随机 ...

  4. delphi 右键删除dbgrid行

    Delphi DBGrid右键删除行并提交至数据库.在form上添加,控件TPopupMenu,并指定右键名称:删行 2.编写删除语句: If ADOQuery1.State in [dsEdit, ...

  5. python之hasattr、getattr和setattr函数

    hasattr函数使用方法 # hasattr函数使用方法 # hasattr(object,attr) # 判断一个对象里是否有某个属性或方法,返回布尔值,有为True,否则False class ...

  6. BZOJ2212 POI2011Tree Rotations(线段树合并)

    显然子树内的操作不会对子树外产生影响.于是贪心,若交换之后子树内逆序对减少就交换. 这个东西可以用权值线段树计算.操作完毕后需要对两棵权值线段树合并,这个的复杂度是两棵线段树的重复节点个数.那么总复杂 ...

  7. Java11实战:模块化的 Netty RPC 服务项目

    Java11实战:模块化的 Netty RPC 服务项目 作者:枫叶lhz链接:https://www.jianshu.com/p/19b81178d8c1來源:简书简书著作权归作者所有,任何形式的转 ...

  8. MT【49】四次函数求最值

    已知$f(x)=(1-x^2)(x^2+ax+b)$的图像关于x=3对称,求$f(x)$的最大值. 解答:显然$-1,7;1,5$是$f(x)=0$的根.故$(x^2+ax+b)=(x-5)(x-7) ...

  9. 【 Gym 101116K 】Mixing Bowls(dfs)

    BUPT2017 wintertraining(15) #4H Gym - 101116K 题意 给定一个菜谱,大写的单词代表混合物,小写的代表基础原料.每个混合物由其它混合物或基础原料组成,不会间接 ...

  10. 【POJ 3176】Cow Bowling(DP)

    题 Description The cows don't use actual bowling balls when they go bowling. They each take a number ...