HDU 4546 比赛难度
比赛难度
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 46 Accepted Submission(s): 6
假设题目的数量一共是n道,这些题目的难度被评级为一个不超过1000的非负整数,并且一场比赛至少需要一个题,而这场比赛的难度,就是所有题目的难度之和,同时,我们认为一场比赛与本场题目的顺序无关,而且题目也不会重复。
显而易见,很容易得到如下信息:
假设比赛只用1个题目,有n种方案;
假设比赛使用2个题目,有(n-1)*n/2种方案;
假设比赛使用3个题目,有(n-2)*(n-1)*n/6种方案;
............
假设比赛使用全部的n个题目,此时方案只有1种。
经过简单估算,小明发现总方案数几乎是一个天文数字!
为了简化问题,现在小明只想知道在所有的方案里面第m小的方案,它的比赛难度是多少呢?
每组测试数据第一行为两个整数n, m(0 < n, m <= 10000),表示现在有n个题目,现在要求第m小的方案的比赛难度。接下来第二行有n个数字,分别表示这n个题目的难度值。
//============================================================================ // Name : B.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> #include <string.h> #include <algorithm> #include <queue> #include <map> #include <vector> #include <math.h> #include <string> #include <stdio.h> #include <math.h> using namespace std; const int MAXN=10010; int a[MAXN]; int b[2][MAXN]; int main() {//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int n,m;int iCase=0;int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);iCase++;for(int i=0;i<n;i++){scanf("%d",&a[i]);}sort(a,a+n);int now=0;b[now][0]=1;b[now][1]=a[0];for(int i=1;i<n;i++){int t1=1,t2=1;bool ff=false;b[now^1][0]=0;while(t1<=b[now][0] && t2<=b[now][0] && b[now^1][0]<=m){if(!ff && a[i]<=min(b[now][t1],b[now][t2]+a[i])){b[now^1][++b[now^1][0]]=a[i];ff=true;continue;}if(b[now][t1]<b[now][t2]+a[i])b[now^1][++b[now^1][0]]=b[now][t1++];elseb[now^1][++b[now^1][0]]=b[now][t2++]+a[i];}while(t1<=b[now][0] && b[now^1][0]<=m){if(!ff && a[i]<=b[now][t1]){b[now^1][++b[now^1][0]]=a[i];ff=true;continue;}b[now^1][++b[now^1][0]]=b[now][t1++];}while(t2<=b[now][0] && b[now^1][0]<=m){if(!ff && a[i]<=b[now][t2]+a[i]){b[now^1][++b[now^1][0]]=a[i];ff=true;continue;}b[now^1][++b[now^1][0]]=b[now][t2++]+a[i];}if(!ff && b[now^1][0]<=m){b[now^1][++b[now^1][0]]=a[i];ff=true;}now^=1;if(!ff)break;}printf("Case #%d: %d\n",iCase,b[now][m]);}return 0; }
HDU 4546 比赛难度相关推荐
- HDU 4546 比赛难度 (优先队列 * * )
比赛难度 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submi ...
- HDU各种比赛题题解(一)
HDU各种比赛题题解(一) Gardon-DYGG Contest 1 HDU1178 Heritage from father[水题] - 海岛Blog - CSDN博客 HDU1181 变形课[D ...
- 比赛难度(HDU4546)
比赛难度 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submi ...
- hdu 4546 输入n个数 问这n个数相加组成的第K小的数是什么
比赛难度 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submi ...
- hdu 确定比赛名次
算法:拓扑排序 题意:有一个比赛,现在知道很多队之间的关系:让你去让确定比赛排名: Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,... ...
- Kaggle新上比赛:Google AI发起地域包容性图像识别竞赛
(欢迎关注"我爱计算机视觉"公众号,一个有价值有深度的公众号~) 昨天Kaggle新上了一个关于图像识别的比赛,Google AI发起了地域包容性图像识别竞赛(Inclusive ...
- CTF比赛的简单了解
<1>竞赛模式 一.解题模式(Jeopardy) 在解题模式CTF赛制中,参赛队伍可以通过互联网或者现场网络参与,这种模式的CTF竞赛与ACM编程竞赛.信息学奥赛比较类似,以解决网络安全技 ...
- 第十八届全国大学生智能汽车竞赛 智能视觉组比赛细则
第十八届全国大学生智能汽车竞赛 智能视觉组比赛细则 智能车竞赛 目 录 Contents 背景介绍 智能视觉组描述 视觉组比赛细则 比赛场地 比赛任务 车模技术要求 第十八届智能视觉组竞赛细则巨大漏洞 ...
- [XUPT]2020寒假训练---比赛专题
比赛链接:https://vjudge.net/contest/357216 说明: 比赛难度正好符合寒假训练的同学.(有一两道可能一些同学做过,我们出题没考虑到sorry) 下面对题目进行解答一下. ...
最新文章
- C语言指针(就做个笔记)
- C++ leetcode 26. 删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
- static_cast, dynamic_cast, const_cast学习和探讨
- 大数据与web开发整合的最佳实践-思考
- PHP判断PHP版本是否及格
- 【做题】CF119D. String Transformation——KMP
- Android学习笔记(八)——在Manifest中设置ActionBar
- 报表 labview_干货!24个LabVIEW初学者常见问题及解答汇总
- Elastic Search Java Api 创建索引结构,添加索引
- JQ 按钮实现两种功能
- 2020最新版本js车牌号检验规则
- ir2104s的自举电容_有关IR2104的自举电容和NMOS选择问题要点.docx
- 在一家公司干多长时间跳槽才合适?值得一读!
- VS2013使用教程总结(2)---显示行号
- mplayer 播放电台_通过SSH的MPlayer从远程主机播放电影
- MySQL 8 复制(四)——GTID与复制
- 重要的不是你正在做什么,而是你在想什么
- 基于 SoC 的卷积神经网络车牌识别系统设计(4-2)基于 Verilog 的 RGB2HSV IP 设计
- 计算机网络——交换机的生成树协议STP
- 【转】从EDA使用角度捋一遍芯片设计流程