比赛难度

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

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

思路 :

用一个结构体

struct haha
{
    int sum;//当前的大小
    int nextsum;//如果加上下一个值总的sum大小
    int nextid;//下一个值对应的id
    bool operator<(const struct haha &b)const
    {return b.nextsum < nextsum;}//按照nextsum,较小的优先出队 这样每次优先队列pop出的值都会保证是最小的 因为pop出的结构体对应的sum加上下一个数值(即nextsum)是最小的
}temp,q;

在pop后   是否加上a[ith]都要考虑进去

#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
int n,m,a[11111],k;
struct haha
{
int sum;
int nextsum;
int nextid;
bool operator<(const struct haha &b)const
{return b.nextsum < nextsum;}
}temp,q;
void solve()
{
sort(a,a+n);
priority_queue<struct haha>que;
q.sum=0;q.nextsum=a[0];q.nextid=0;
que.push(q);
int cnt=0;
a[n]=0;
while(cnt<m)
{
temp=que.top();
que.pop();
if(temp.nextid>=n) continue;
q.sum=temp.sum;q.nextsum=temp.sum+a[temp.nextid+1];q.nextid=temp.nextid+1;
que.push(q);
q.sum=temp.nextsum;q.nextsum=temp.nextsum+a[temp.nextid+1];q.nextid=temp.nextid+1;
que.push(q);
cnt++;
}
for(int i = 0; !que.empty(); i ++) {a[i] = que.top().sum; que.pop();}
sort(a,a+m);
printf("Case #%d: %d\n",k,a[m-1]);
}
int main()
{
int cas,i,j;
scanf("%d",&cas);
while(cas--)
{
k++;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) scanf("%d",&a[i]);
solve();
}
return 0;
}

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

  1. 【代码源 Div1 - 108】#464. 数数(主席树,区间比k小的数的个数)HDU4417

    problem solution 主席树查询区间比k小的数的个数 建树之后直接在目标区间的主席树内将 H 作为挡板递归计数. #include<bits/stdc++.h> using n ...

  2. hdu 3949(线性基模版) 异或和中第k小的数

    传送门 给定 n(n \le 10000)n(n≤10000) 个数 a_1, a_2, \ldots, a_na​1​​,a​2​​,-,a​n​​,以及 Q(Q\le 10000)Q(Q≤1000 ...

  3. 最小的k个数(第k小的数)

    1. 利用快排的思想,由于每次只选择左右部分中的一部分,因此时间复杂度为O(n). # -*- coding:utf-8 -*- class Solution:# (O(n)复杂度)def GetLe ...

  4. java快排,找第K小的数,找前K个数

    import java.util.Random;public class Main {//时间复杂度,即步骤数public static int sum =0;public static void m ...

  5. 从2个有序数组中找第k小那个数

    系列文章目录 提示:AC==accepted,即LeetCode上提交代码通过,我刷题的代码用的是java,但是C++一个道理,算法思想一样,而且c++和java非常类似,python需要自己写,但是 ...

  6. c语言while输入n求n个奇数,任意输入n个整数,输出这n个数中的奇数个数和偶数个数.用while语句...

    C语言 输入n并输入n个数,输出这n个数中的所有奇数的乘积 #includevoidmain(){inti,n,arr[100],mul=1;printf("请输入n值:");sc ...

  7. ACMNO.41C语言-数字调序 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数

    题目描述 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图. 写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数. 输入 输入数据的个数n n个整数 移动的位置m ...

  8. c语言代码,输入两个数,输出第一个数到第二个数之间所有的数

    用C语言实现,输入两个数,输出第一个数到第二个数之间包含的所有数 #include <stdio.h> int num(int x, int y); int main() {int a1, ...

  9. C语言 输入一个字符串,统计字符个数,并按照倒序输出该字符串。

    题目:C语言 输入一个字符串,统计字符个数,并按照倒序输出该字符串. #include<stdio.h>void main() {char str[10];scanf("%s&q ...

最新文章

  1. ios 贝塞尔曲线 颜色填充_IOS 贝塞尔曲线(UIBezierPath)属性、方法整理
  2. [云炬创业基础笔记]成长资源培养与控制
  3. html自动get,HTML Get
  4. 阿里云云计算ACP考试知识点(标红为重点)
  5. 孙叫兽进阶之路之敏捷开发
  6. 设计模式 - 单例模式(Singleton Pattern)
  7. prerenderspaplugin 打包完成后如何让百度收录_网站优化技术第一篇(如何快速提升网站的收录量?)...
  8. 字典的增删改查 daty 5
  9. C++11新特性——auto和decltype
  10. LintCode—删除链表中的元素(452)
  11. 人工智能技术与现代应用
  12. 喝咖啡的好处和坏处及注意事项
  13. 80后 程序猿 单恋10年,是一种怎样的体验?
  14. TextRank算法学习笔记
  15. 剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数)
  16. 三款正射图合并软件性能对比
  17. Linux管道命令(pipe)
  18. python自带的程序编辑器有哪些菜单_python自带的编辑器是
  19. 聚划算的下沉市场生意
  20. 软件安装和点亮流水灯

热门文章

  1. 微信打不开怎么回事?分享解决办法
  2. iOS设备播放mkv格式视频无声音解决
  3. 国内快速下载keil的pack文件包
  4. DM642接CMOS摄像头驱动(OV7725)终于搞定了
  5. 杭电计算机学院毕业要求,杭州电子科技大学关于攻读博士学位研究生培养工作的规定...
  6. 解决ssh: connect to host github.com port 22: Connection refused
  7. 预见2019,链塔专家寄语(三) | 链塔新春特别活动
  8. 汉仪尚巍手书_汉仪尚巍手书字体下载|
  9. Qt 实现自定义Ui控件例子,以自定义的Slider为例(QWidget)
  10. xml 转 txt (亲测有效)