ACM学习历程—UVALive 7147 World Cup(分类讨论 && 贪心)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5159
题目大意是就是n个人进行两两的比赛,胜一局得A分,平局B分,败局C分。
然后取前m名入围,求入围的人最小的可能分数以及被淘汰的人的最大的可能分数。
这题首先可以想到的是胜A负C和胜C负A的情况是一模一样的。
所以可以先考虑让A大C小。
然后开始分情况讨论:
(1)B最小
1·这种情况下全部平局的话,能让入围的人分数最小。
2·然后需要考虑被淘汰的人的最大的可能分数:
必然将这些人分成m+1+n-m-1
由于要让这个’1’的分数尽可能大,自然考虑让n-m-1个人全部负场淘汰。
这样前面m+1个人都先得到a*(n-m-1)分。
然后需要让这个’1’尽可能大的话,首先他可以和m其中一半的人打胜场,和另一半的人打负场,这比打平局合算。然后这一半的人再胜另一半的人,这种情况所有人分数平衡。
此时又得到m/2*(a+c)分。
最后如果m是奇数,那么最后一场打负场。
这样做,因为’1’最多只能胜m个人里面一半的人,否则他肯定不会是最后一名。
所以中间打一半胜一半负,而且最后m%2那一局不能胜。
此外c>b,所以考虑m%2那场负。
(2)B最大
1·这种情况下全部平局的话,能让被淘汰的人的分数最大。
2·然后需要考虑围的人最小的可能分数;
必然将这些人分成m-1+1+n-m
由于要让这个’1’的分数尽可能小,自然考虑让m-1个人全部胜场入围。
这样前面n-m+1个人都先得到c*(m-1)分。
然后需要让这个’1’尽可能小的话,首先他可以和n-m其中一半的人打胜场,和另一半的人打负场,这比打平局分数少。
此时又得到(n-m)/2*(a+c)分。
最后如果n-m是奇数,那么最后一场打胜场。
这样做,因为’1’最多只能负m个人里面一半的人,否则他肯定不会是第一名。
所以中间打一半胜一半负,而且最后(n-m)%2那一局不能负。
此外a<b,所以考虑(n-m)%2那场胜。
(3)剩余情况中2*b < a+c的:
为什么考虑这两者的关系,因为上面的讨论已经发现了微妙的联系。
1·考虑围的人最小的可能分数;
必然m-1+1+n-m
然后让前面的m-1个人都胜场入围,那么必然’1’首先需要败m-1场。
然后他需要胜过至少(n-m)里面的一半人,这种情况下由于一开始的2*b < a+c,他选择平局分数更小。
自然最后如果多一场选择平局,而不选择胜局。
2·考虑被淘汰的人的最大的可能分数:
自然需要先胜(n-m-1)个人,因为他们全部负场。
然后他跟前面的人打一半胜一半负,因为2*b < a+c。
最后多的一场m%2打平局,否则他将胜过一半人。
(4)最后一种情况和(3)类似了。
代码:
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- #include <set>
- #include <map>
- #include <vector>
- #include <string>
- #include <queue>
- #define LL long long
- #define MOD 1000000007
- using namespace std;
- int n, m, a, b, c;
- LL mi, ma;
- void input()
- {
- scanf("%d%d", &n, &m);
- scanf("%d%d%d", &a, &b, &c);
- if (a < c) swap(a, c);
- }
- void work()
- {
- if (b < a && b < c)
- {
- mi = (LL)b*(n-);
- ma = (LL)a*(n-m-);
- ma += (LL)m/*(a+c);
- ma += (LL)c*(m%);//
- return;
- }
- if (b > a && b > c)
- {
- ma = (LL)b*(n-);
- mi = (LL)c*(m-);
- mi += ((LL)n-m)/*(a+c);
- mi += (LL)a*((n-m)%);//
- return;
- }
- if (*b < a+c)
- {
- mi = (LL)c*(m-);
- mi += ((LL)n-m)*b;
- ma = (LL)a*(n-m-);
- ma += (LL)m/*(a+c);
- ma += (LL)b*(m%);//
- return;
- }
- else
- {
- mi = (LL)c*(m-);
- mi += ((LL)n-m)/*(a+c);
- mi += (LL)b*((n-m)%);//
- ma = (LL)a*(n-m-);
- ma += (LL)m*b;
- return;
- }
- }
- int main()
- {
- //freopen("test.in", "r", stdin);
- int T;
- scanf("%d", &T);
- for (int times = ; times <= T; ++times)
- {
- input();
- work();
- printf("Case #%d: ", times);
- printf("%lld %lld\n", ma, mi);
- }
- return ;
- }
ACM学习历程—UVALive 7147 World Cup(分类讨论 && 贪心)的更多相关文章
- UVALive 7147 World Cup(数学+贪心)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...
- ACM学习历程—FZU2195 检查站点(树形DP || 贪心)
Description 在山上一共有N个站点需要检查,检查员从山顶出发去各个站点进行检查,各个站点间有且仅有一条通路,检查员下山前往站点时比较轻松,而上山时却需要额外的时间,问最后检查员检查完所有站点 ...
- ACM学习历程—FZU 2144 Shooting Game(计算几何 && 贪心 && 排序)
Description Fat brother and Maze are playing a kind of special (hentai) game in the playground. (May ...
- ACM学习历程—HDU 4726 Kia's Calculation( 贪心&&计数排序)
DescriptionDoctor Ghee is teaching Kia how to calculate the sum of two integers. But Kia is so carel ...
- UVaLive 6862 Triples (数学+分类讨论)
题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...
- AtCoder Beginner Contest 173 E Multiplication 4 分类讨论 贪心
LINK:Multiplication 4 害怕别人不知道我有多菜 那就上张图: 赛时 太慌了 (急着AK 题目不难却暴露我的本性 根本不思考无脑写 wa了还一直停不下来的debug 至少被我发现了1 ...
- ACM学习历程—CodeForces 590A Median Smoothing(分类讨论 && 数学)
题目链接:http://codeforces.com/problemset/problem/590/A 题目大意是给一个串,头和尾每次变换保持不变. 中间的a[i]变成a[i-1],a[i],a[i+ ...
- 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始
以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告
- ACM学习历程—HDU 5512 Pagodas(数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5512 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是给了初始的集合{a, b},然后取集合里 ...
随机推荐
- 基于PLSQL的数据库备份方法及如何解决导出clob和blob类型数据报错的问题
基于PL/SQL的数据库备份方法 PL/SQL Developer是Oracle 数据库中用于导入或导出数据库的主要工具,本文主要介绍了利用PL/SQL Developer导入和导出数据库的过程,并对 ...
- 【python】-- web开发之CSS
CSS CSS作用概述:(通俗的讲就是将HTML这个赤裸裸的“人”,穿上华丽的衣服) CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常 ...
- can t connect to mysql server on 'localhost'解决方法
源:http://www.111cn.net/database/mysql/37700.htm 先重启服务器可解决大部分问题 错误编号:2003 问题分析: 无法连接到 mysql 服务器,可能的情况 ...
- 如何使用Django实现用户登录验证
最初开始搞用户登录验证的时候感觉没什么难的,不就是增删改查中的查询数据库么,但是还是遇到许多小问题,而且感觉在查询数据库的时候,要把前端的数据一条一条的进行比对,会导致我的代码很丑,而且方式很不智,所 ...
- kettle连接资源库设置
到这里你是登陆不上去的,需要创建或更新按钮,因为需要在你的数据库里创建关于kettle的数据表,来存储资源库 点执行就可以了 一般情况下kettle资源库自动给你创建两个用户: 工具->资源库- ...
- eclipse InvocationTargetException 错误解决
1.今天做一个推送的,用到了几个jar包,直接以User Library的形式加进 在单元测试中,测试的很好,没有任何问题, 但是在action中测试,一测试就崩. 跟踪以后出现InvocationT ...
- CentOS iSCSI服务器搭建------LUN篇
先上服务器信息(你懂得) [root@node ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@node ~]# uname ...
- sql语句 字段的赋值
将同一个表中的一个字段2的所有值赋值给另一个字段1 UPDATE 表名 SET 字段1 = 字段2 也可以把字段所有的值赋为null UPDATE 表名 SET 字段1 = null
- 工作中你肯定会有关于 Yii2 的小贴士用法,在下面评论分享出来吧。
场景: 数据库有user表有个avatar_path字段用来保存用户头像路径 需求: 头像url需要通过域名http://b.com/作为基本url 目标: 提高代码复用 此处http://b.com ...
- 深入浅出聊聊企业级API网关
http://architect.dataguru.cn/article-11431-1.html API Gateway(API GW / API 网关),顾名思义,是出现在系统边界上的一个面向 A ...