比赛难度

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 46    Accepted Submission(s): 6

Problem Description
最近,小明出了一些ACM编程题,决定在HDOJ举行一场公开赛。
  假设题目的数量一共是n道,这些题目的难度被评级为一个不超过1000的非负整数,并且一场比赛至少需要一个题,而这场比赛的难度,就是所有题目的难度之和,同时,我们认为一场比赛与本场题目的顺序无关,而且题目也不会重复。
  显而易见,很容易得到如下信息:
  假设比赛只用1个题目,有n种方案;
  假设比赛使用2个题目,有(n-1)*n/2种方案;
  假设比赛使用3个题目,有(n-2)*(n-1)*n/6种方案;
  ............
  假设比赛使用全部的n个题目,此时方案只有1种。
  
  经过简单估算,小明发现总方案数几乎是一个天文数字!
  为了简化问题,现在小明只想知道在所有的方案里面第m小的方案,它的比赛难度是多少呢?
Input
输入数据的第一行为一个整数T(1 <= T <= 20),表示有T组测试数据。
每组测试数据第一行为两个整数n, m(0 < n, m <= 10000),表示现在有n个题目,现在要求第m小的方案的比赛难度。接下来第二行有n个数字,分别表示这n个题目的难度值。
Output
对于每组测试数据,输出一行"Case #c: ans"(不包含引号),ans 表示要求的第m小的比赛难度,输入数据保证存在第m小的方案,具体参见样例。
Sample Input
2 5 6 1 1 1 1 1 5 25 1 2 3 4 5
Sample Output
Case #1: 2 Case #2: 11
Source
2013金山西山居创意游戏程序挑战赛——初赛(1)
Recommend
liuyiding
我的做法就是不断合并两个有序的数组,维护一个递增的数组。
先把a数组从小到大排序。
比如前i-1 个数组合产生一个有序的数组
b[now][1]  、 b[now][2]、b[now][3]、··········b[now][b[now][0]]
所以b[now][0]存的是数组的个数
然后a[i]加入进来。含有a[i]的产生一个新的序列:a[i]、a[i]+b[now][1]  、 a[i]+b[now][2]、a[i]+b[now][3]、··········a[i]+b[now][b[now][0]]
将两个有序的数列合并,就得到前i个数组合产生的有序数组。
然后不断递推下去。
这个数组的大小不要大于m,大于m部分就不需要了
还有如果数组的大小大于m了,就是满了,而且当前的a[i]没有进去,说明后面的也进不去了,直接break;
感觉我的做法复杂度比较大==55555555
金山西山居比赛的时候竟然抢到了这题的FB,我都没有想到。。。zzzzzzzz 貌似这样的不是正解。
//============================================================================
// 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 比赛难度相关推荐

  1. HDU 4546 比赛难度 (优先队列 * * )

    比赛难度 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submi ...

  2. HDU各种比赛题题解(一)

    HDU各种比赛题题解(一) Gardon-DYGG Contest 1 HDU1178 Heritage from father[水题] - 海岛Blog - CSDN博客 HDU1181 变形课[D ...

  3. 比赛难度(HDU4546)

    比赛难度 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submi ...

  4. hdu 4546 输入n个数 问这n个数相加组成的第K小的数是什么

    比赛难度 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submi ...

  5. hdu 确定比赛名次

    算法:拓扑排序 题意:有一个比赛,现在知道很多队之间的关系:让你去让确定比赛排名: Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,... ...

  6. Kaggle新上比赛:Google AI发起地域包容性图像识别竞赛

    (欢迎关注"我爱计算机视觉"公众号,一个有价值有深度的公众号~) 昨天Kaggle新上了一个关于图像识别的比赛,Google AI发起了地域包容性图像识别竞赛(Inclusive ...

  7. CTF比赛的简单了解

    <1>竞赛模式 一.解题模式(Jeopardy) 在解题模式CTF赛制中,参赛队伍可以通过互联网或者现场网络参与,这种模式的CTF竞赛与ACM编程竞赛.信息学奥赛比较类似,以解决网络安全技 ...

  8. 第十八届全国大学生智能汽车竞赛 智能视觉组比赛细则

    第十八届全国大学生智能汽车竞赛 智能视觉组比赛细则 智能车竞赛 目 录 Contents 背景介绍 智能视觉组描述 视觉组比赛细则 比赛场地 比赛任务 车模技术要求 第十八届智能视觉组竞赛细则巨大漏洞 ...

  9. [XUPT]2020寒假训练---比赛专题

    比赛链接:https://vjudge.net/contest/357216 说明: 比赛难度正好符合寒假训练的同学.(有一两道可能一些同学做过,我们出题没考虑到sorry) 下面对题目进行解答一下. ...

最新文章

  1. C语言指针(就做个笔记)
  2. C++ leetcode 26. 删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
  3. static_cast, dynamic_cast, const_cast学习和探讨
  4. 大数据与web开发整合的最佳实践-思考
  5. PHP判断PHP版本是否及格
  6. 【做题】CF119D. String Transformation——KMP
  7. Android学习笔记(八)——在Manifest中设置ActionBar
  8. 报表 labview_干货!24个LabVIEW初学者常见问题及解答汇总
  9. Elastic Search Java Api 创建索引结构,添加索引
  10. JQ 按钮实现两种功能
  11. 2020最新版本js车牌号检验规则
  12. ir2104s的自举电容_有关IR2104的自举电容和NMOS选择问题要点.docx
  13. 在一家公司干多长时间跳槽才合适?值得一读!
  14. VS2013使用教程总结(2)---显示行号
  15. mplayer 播放电台_通过SSH的MPlayer从远程主机播放电影
  16. MySQL 8 复制(四)——GTID与复制
  17. 重要的不是你正在做什么,而是你在想什么
  18. 基于 SoC 的卷积神经网络车牌识别系统设计(4-2)基于 Verilog 的 RGB2HSV IP 设计
  19. 计算机网络——交换机的生成树协议STP
  20. 【转】从EDA使用角度捋一遍芯片设计流程

热门文章

  1. 【3DSmax】3DSmax9基础建模教程—读书笔记2(第二课)
  2. 《惢客创业日记》2018.11.28(周三)北京导师行•风筝和风
  3. 首个数字银行卡明年发行,广州出台区块链措施支持大湾区
  4. 第14课:scratchjr踢足球
  5. 制作Windows To Go Mac,windows电脑通用
  6. 志汇同城小程序常见问题,已解决
  7. ROS:服务数据(srv)的定义与使用
  8. 代码签名、驱动签名的常见问题解答
  9. Best-first search
  10. spring boot火车订票系统 毕业设计源码031012