D. Too Easy Problems
链接
[http://codeforces.com/group/1EzrFFyOc0/contest/913/problem/D]
题意
给你n个题目,考试时间T,对于每个问题都有一个ai,以及解决所花的时间,
让你找到一个做题(选择k个题去做)的方案,使得最后ai<=k的情况最多
分析
其实我刚开始不会的,后来看大佬的才会的
我们先利用vector数组根据ai大小分类,然后对于每一类肯定是时间少的有限考虑,所以考虑用优先队列。
那么我们只要去由n到0枚举即可。
先把ai为i的题目入队列,然后如果此时队列里的题目数大于i的话,我们需要把时间大的出队列即可(因为队列中的题目ai一定大于等于i,删去哪个都一样)。
过程中统计总时间sum确保不超过T即可。
然后再枚举的过程中只要q.size()==i&&sum<=T即满足条件。
具体看代码吧
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=2e5+10;
vector<pair<int,int> > v[maxn];
priority_queue<pair<int,int> > q;//优先队列默认最大堆
int n,T;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int a,c,i;
//freopen("in.txt","r",stdin);
cin>>n>>T;
for(i=1;i<=n;i++)
{
cin>>a>>c;
v[a].push_back(make_pair(c,i));//把ai一样的存在一起
}
ll sum=0;
for(i=n;i>=0;i--){
for(auto u:v[i]){
q.push(u);
sum+=u.first;
}
while(q.size()>i){
sum-=q.top().first;
q.pop();//把最耗时的出队
}
if(q.size()==i&&sum<=T){//贪得最大满足条件,因为往后i--不可能比现在大了
cout<<i<<' '<<i<<endl;
while(q.size()){
cout<<q.top().second<<' ';
q.pop();
}
cout<<endl;
return 0;
}
}
}
D. Too Easy Problems的更多相关文章
- 解题:AT2064 Many Easy Problems&EXNR #1 T3 两开花
题面 两道题比较像,放在一起写了,后者可以看成前者的加强版 (sto ztb orz) 先看AT那道题 考虑计算每个点的贡献,用容斥计算:每个点没有贡献当且仅当选的所有点都在以他为根时的一个子节点的子 ...
- Codeforces 913D - Too Easy Problems
913D - Too Easy Problems 思路:二分check k 代码: #include<bits/stdc++.h> using namespace std; #define ...
- 【AtCoder】AGC005 F - Many Easy Problems 排列组合+NTT
[题目]F - Many Easy Problems [题意]给定n个点的树,定义S为大小为k的点集,则f(S)为最小的包含点集S的连通块大小,求k=1~n时的所有点集f(S)的和取模92484403 ...
- 【CodeForces】913 D. Too Easy Problems
[题目]D. Too Easy Problems [题意]给定n个问题和总时限T,每个问题给定时间ti和限制ai,当解决的问题数k<=ai时问题有效,求在时限T内选择一些问题解决的最大有效问题数 ...
- AtcoderGrandContest 005 F. Many Easy Problems
$ >AtcoderGrandContest \space 005 F. Many Easy Problems<$ 题目大意 : 有一棵大小为 \(n\) 的树,对于每一个 \(k \i ...
- Codeforces B. Too Easy Problems
题目描述: time limit per test 2 seconds memory limit per test 256 megabytes input standard input output ...
- 【AGC 005F】Many Easy Problems
Description One day, Takahashi was given the following problem from Aoki: You are given a tree with ...
- AtCoder - 2064 Many Easy Problems
Problem Statement One day, Takahashi was given the following problem from Aoki: You are given a tree ...
- 【AGC005F】Many Easy Problems FFT 容斥原理
题目大意 给你一棵树,有\(n\)个点.还给你了一个整数\(k\). 设\(S\)为树上某些点的集合,定义\(f(S)\)为最小的包含\(S\)的联通子图的大小. \(n\)个点选\(k\)个点一共有 ...
随机推荐
- myeclipce项目导入eclipse中报错
1 找到新建页面所在的工程名字,然后左键选中,右键弹出功能菜单,选择Build Path,进入配置路径. 2 在java build path 页面的下选择Libraries栏目(默认选择),点击右侧 ...
- C语句详细(初学者)
C程序的执行部分是由语句组成的.程序的功能也是由执行语句实现的. C语句分为以下六类: 1.表达式语句:表达式加上分号“:”组成.执行表达式语句就是计算表达式的值. 2.函数调用语句:函数名.实际参数 ...
- JavaScript中数组的增删改查以及应用方式
数组的增加方法 1.push()方法向数组中末尾添加一个元素,原数组改变 var arr=[1,2,3,4]; var arr1=arr.push(6); console.log(arr);//打印出 ...
- Redis的安装和Jedis的使用
Redis的安装和学习资料 Redis的安装可以参考 https://www.cnblogs.com/dddyyy/p/9763098.html Redis的学习可以参考https://www.cnb ...
- Rman将数据文件恢复到不同的路径
RMAN> startup nomount connected to target database (not started)Oracle instance started Total Sys ...
- docker常用常用删除操作
文章参考 https://blog.csdn.net/superdangbo/article/details/78688904 https://www.cnblogs.com/jackadam/p/8 ...
- windows系统下Disconf web安装-分布式配置管理平台
文章参考自 http://blog.csdn.net/syc001/article/details/78128117 https://www.cnblogs.com/mrluo735/p/632271 ...
- 【转】Kaggle注册问题-验证码和手机短信
注册和登录Kaggle时验证码无法显示问题 参考:https://blog.csdn.net/zhuisaozhang1292/article/details/81529981 应用FQ软件需要时时关 ...
- find,xargs,tar有选择打包
find ./ -mtime 83 -exec sz {} \; find . -type f -exec ls -l {} \; \;表达 -exec 的结束. ================== ...
- PAT A1034 Head of a Gang (30 分)——图遍历DFS,字符串和数字的对应保存
One way that the police finds the head of a gang is to check people's phone calls. If there is a pho ...