博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2014上海区域赛 J题 World Cup 推公式
阅读量:5367 次
发布时间:2019-06-15

本文共 1282 字,大约阅读时间需要 4 分钟。

题目链接:

UVALive 7147

 

题意

对于单循环赛(每个队都要跟其他的每一个队打且只打一场比赛)

赢积A分,输积C分,平都积B分,ABC均非负但不保证A>B>C

共有n个队,其中m个能晋级,分数相同的用抽签来决定谁晋级

求最多拿多少分仍有可能晋级失败,最少拿多少分仍有晋级可能

 

当时我们队的思路是

先按照A>B>C的符合常识的情况来推公式

那么

想法很单纯

对于第一个答案,【要尽量让那个包含被毫无悬念地淘汰的队伍的集合,得到最少的分数,这样可以让前面晋级的队伍的分数冲高】

对于第二个答案,【要尽量让那个包含毫无悬念地晋级的队伍的结合,得到尽可能多的分数,这样可以让包含踩在晋级临界线的队伍和毫无悬念被淘汰的队伍的集合包含尽可能少的分数】

这样不难推出一个公式

 

然后用类似的想法 可以推出以下各种情况

A>B>C且2B < A+C

A>B>C且2B > A+C

B>max(A, C)

B<min(A, C)

其中A、C的大小关系无所谓,若A<C,swap一下即可

 

可以分成四种情况推公式

不过我们队是把各种情况都统一成一份公式 具体见代码

 

#include 
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int maxn = 15;int main(){ //freopen("in.txt", "r", stdin); int T; scanf("%d", &T); int kase = 0; while(T--) { printf("Case #%d: ", ++kase); ll n, m; ll a, b, c; scanf("%lld%lld", &n, &m); scanf("%lld%lld%lld", &a, &b, &c); if(a < c) swap(a, c); ll ans1, ans2; if(a + c < 2 * b) { ans1 = (n - m - 1) * max(a, b) + m * b; ans2 = (m-1)*min(b,c) + (n-m)/2*(a+c) + (n-m)%2*min(a,b); } else { ans1 = (n - m - 1) * max(a, b) + m/2*(a+c) + m%2*max(b,c); ans2 = (m-1)*min(b,c) + (n-m)*b; } printf("%lld %lld\n", ans1, ans2); } return 0;}

 

转载于:https://www.cnblogs.com/dishu/p/4529739.html

你可能感兴趣的文章
Python3:输出当前目录所有文件的第二种方式-walk()函数
查看>>
每日算法 ---- 求1!+2!+3!+......+20!的值
查看>>
nodejs 全局变量-global
查看>>
复制参数优化
查看>>
日期选择器
查看>>
关于NHibernate、LINQ、Entity Framework
查看>>
查看库文件中的接口
查看>>
acid. cap
查看>>
Rewrite MSIL Code on the Fly with the .NET Framework Profiling API
查看>>
1014 Uniform Generator
查看>>
js正则函数match、exec、test、search、replace、split使用介绍集合
查看>>
类目 延展 单例 协议
查看>>
Hibernate配置文件中配置各种数据库的driver、URL
查看>>
scrapy框架的每个模块的用途
查看>>
H3C 广播风暴
查看>>
label 对齐
查看>>
location.href
查看>>
error when loading the sdk 发现了元素 d:skin 开头无效内容
查看>>
Android Application Fundamentals——Android应用程序基础知识
查看>>
OpenWRT GPIO人口控制 WLED
查看>>