2017 湖南省赛 K Football Training Camp

题意:

在一次足球联合训练中一共有\(n\)支队伍相互进行了若干场比赛。 对于每场比赛,赢了的队伍得3分,输了的队伍不得分,如果为平局则两支队伍各得1分。

现在给出每只队伍的得分\(s_i\),问最少和最多进行了多少场比赛,不超过1000组数据

\(1<=n<=20\)

\(0<=s_i<=200\)

思路:

比赛的时候脑子不清醒,被这个配对难住了,暴力往搜索方面想了想,肯定会TLE啦,就放弃了

现在清醒一点,胜负局对胜负配对没有影响,只有平局对配对有影响,而且平局越多,比的场次也越多

如果设胜负局有\(x\)场,平局\(y\)场,则有\(3x + 2y = sum\)

枚举\(x\), 判断是否可以出现\(y\)场平局,但是这里取胜的队伍策略不固定,所以不好判断平局是否可以出现

现在问题就变成 给一个局面 如何判断当前局面,可以全打平局

当且仅当 \(sum\) 为偶数, 且\(max <= sum / 2\)

\(sum\)为偶数是显然的,若\(max > sum / 2\), 那么剩下的数无法消除\(max\)

考虑这样一种方法,假设\(a_1,a_2,...a_n\)为得分从小到大排序后的序列,找到中线所在的位置

令\(psum[i]\)为分数的前缀和,假设\(i\)为一个满足 \(psum[i-1] + a_i >= sum / 2\)的位置

若\(psum[i-1] + a_i = sum / 2\) 显然就可以将\(a_1,...a_i\)和\(a_{i+1},...a_n\)这两部分配对即可

若\(psum[i-1] + a_i > sum / 2\) 这样将\(a_i\)分成了两部分,将左边部分\(sum / 2 - psum[i-1]\)用\(a_{i+1},...a_n\)消掉,右边部分\(psum[i] - sum / 2\)用\(a_1,...a_i\)消掉

然后\(a_{i+1},...a_n\) 与 \(a_1,...a_i\)配对即可

这样若$max > sum / 2 $那么中线一定会出现在 \(a_n\) 中,就无法成功配对了。

知道了这个结论,现在只需要每次贪心将\(max\) 取一场胜负局,再接着判定平局是否合法即可

#include<queue>
#include<algorithm>
#include<iostream>
#include<cstdio> #define LL long long using namespace std; priority_queue<int > q;
int main(){ int n;
while(scanf("%d",&n) == 1){
int x,ansmx = 0,ansmi = 0;
while(!q.empty()) q.pop();
int sum = 0;
for(int i = 1;i <= n;i++){
scanf("%d",&x);
q.push(x);
sum += x;
}
int cnt = 0;
while(!q.empty()){
x = q.top();q.pop();
if(sum % 2 == 0 && x <= sum / 2) {
if(!ansmx) ansmx = cnt + sum / 2;
ansmi = cnt + sum / 2;
}
if(x < 3) break;
sum -= 3;
q.push(x - 3);
cnt++; }
cout<<ansmi<<" "<<ansmx<<endl;
}
return 0;
}

2017 湖南省赛 K Football Training Camp的更多相关文章

  1. 湖南省第十三届大学生计算机程序设计竞赛 Football Training Camp 贪心

    2007: Football Training Camp[原创-转载请说明] Submit Page   Summary   Time Limit: 1 Sec     Memory Limit: 1 ...

  2. CSU-2007 Football Training Camp

    Football Training Camp 在一次足球联合训练中一共有n支队伍相互进行了若干场比赛. 对于每场比赛,赢了的队伍得3分,输了的队伍不得分,如果为平局则两支队伍各得1分. Input 输 ...

  3. 【数论】【原根】【动态规划】【bitset】2017四川省赛 K.2017 Revenge

    题意: 给你n(不超过200w)个数,和一个数r,问你有多少种方案,使得你取出某个子集,能够让它们的乘积 mod 2017等于r. 2017有5这个原根,可以使用离散对数(指标)的思想把乘法转化成加法 ...

  4. Petrozavodsk Summer Training Camp 2017 Day 9

    Petrozavodsk Summer Training Camp 2017 Day 9 Problem A. Building 题目描述:给出一棵树,在树上取出一条简单路径,使得该路径的最长上升子序 ...

  5. Petrozavodsk Summer Training Camp 2017

    Petrozavodsk Summer Training Camp 2017 Problem A. Connectivity 题目描述:有\(n\)个点,现不断地加边.每条边有一种颜色,如果一个点对\ ...

  6. ACM总结——2017湖南省省赛总结

    2017省赛已经结束了2天了,今天终于有时间,也有勇气来写下这一篇总结.的确,这是我第一次正式的ACM线下赛,我本以为再不济,也可以拿个三等奖,没想到,实力打铁.确实对我打击比较大,以前的确是知道自己 ...

  7. 2016 Al-Baath University Training Camp Contest-1

    2016 Al-Baath University Training Camp Contest-1 A题:http://codeforces.com/gym/101028/problem/A 题意:比赛 ...

  8. 2015-2016 Petrozavodsk Winter Training Camp, Nizhny Novgorod SU Contest (5/9)

    2015-2016 Petrozavodsk Winter Training Camp, Nizhny Novgorod SU Contest B. Forcefield 题意 给你一维平面上n个镜子 ...

  9. Petrozavodsk Winter Training Camp 2018

    Petrozavodsk Winter Training Camp 2018 Problem A. Mines 题目描述:有\(n\)个炸弹放在\(x\)轴上,第\(i\)个位置为\(p_i\),爆炸 ...

随机推荐

  1. css跨浏览器大全

    CSS技巧1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了.缺点是要控制内容不要 ...

  2. HyperLedger Fabric 1.4 区块链应用场景(3.1)

    比特币是区块链应用最早的场景,随着比特币安全稳定运行多年以后,数字货币的场景应用遍地开花,各种山寨币泛滥,通过ICO(Initial Coin Offering 首次币发行)就能融到大量资金,上市后的 ...

  3. [Windows]_[C/C++]_[如何调试子进程]

    场景 1.VC++ 的程序A在启动程序C时, 如果需要调试程序C的话一般有两种, 一种是通过菜单 调试->附加到进程的方式来调试程序, 缺点就是这个进程必须先启动, 但是一启动的话有可能就执行了 ...

  4. 剁了xp,醉了win7

    装完win7,安装各种软件完毕,重启,然并卵.  cpu,内存飙升!! svchost.exe这个进程内存发疯了一样往上飙升 从 几十兆  到占用1个多G, 纳尼, 总共物理内存才2G. ╮(╯▽╰) ...

  5. python统计日志小脚本

    日志格式如下: [ 2016-06-28T00:10:33-03:00 ] xxx.xx.xx.xxx /api/index/xxx/ ERR: code:400 message: params: c ...

  6. Android 序列化比对

    本文转自:https://www.zybuluo.com/linux1s1s/note/91046 注:部分内容有更改 在Android中使用序列化,无非两种途经: Parcelable 和 Seri ...

  7. ionic 入口禁止加载其他页面

    .state('memberOrders', { prefetchTemplate: false, url: '/memberOrders', templateUrl: '/MemberOrders' ...

  8. 安装mathtype出问题卸载后 office2016打开mathtype弹错误窗口

    解决方法:找到 C:\Program Files (x86)\Microsoft Office\root\Office16\STARTUP目录下的MathType Commands 6 For Wor ...

  9. IDEA 中.properties文件中文自动转Unicode编码及乱码问题

    问题描述: 在使用IDEA开发工具编辑属性文件(.properties)的时候出现中文自动转成了Unicode编码,或在读取属性文件的时候中文出现乱码. 问题解决: 进入 File -> Set ...

  10. MATLAB中矢量场图的绘制 (quiver/quiver3/dfield/pplane) Plot the vector field with MATLAB

    1.quiver函数 一般用于绘制二维矢量场图,函数调用方法如下: quiver(x,y,u,v) 该函数展示了点(x,y)对应的的矢量(u,v).其中,x的长度要求等于u.v的列数,y的长度要求等于 ...