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\)个点一共有 ...
随机推荐
- 详细理解平衡二叉树AVL与Python实现
前言 上一篇文章讨论的二叉搜索树,其时间复杂度最好的情况下是O(log(n)),但是最坏的情况是O(n),什么时候是O(n)呢? 像这样: 如果先插入10,再插入20,再插入30,再插入40就会成上边 ...
- 使用Python语言理解递归
递归 一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃. 递归其实是程序设计语言学习过程中很快就会接触到的东西,但有关递归的理解可能还会有一些遗漏,下面 ...
- rpm安装时出现循环依赖
在安装git包时提示要安装perl-git,当安装perl-git时又提示要安装git包.报错如下: [root@racdb1 Packages]# rpm -ivh perl-Git-1.7.1-4 ...
- FLask上传文件
目录 Flask上传文件 改进上传 上传进度条 一个更简便的方案 Flask上传文件 文件上传的基本原理实际上很简单,基 本上是: 一个带有 enctype=multipart/form-data 的 ...
- tidb在DDL语句方面的测试
Mysql与tidb测试数据为8000万行. 1.修改一个字段的列名,比如将“ctime”修改为“cctime”. Tidb测试: MySQL测试: 2.同一属性之间切换,即修改一个字段的属性大小.比 ...
- win10系统如何关掉系统自动更新
越来越多的电脑使用者都在使用Windows10系统,尽管系统是一代代更新的,但难免有槽点,Windows10系统也不例外,最大的槽点就是“自动更新”的功能.当然,“自动更新”的功能也是相当有用处的. ...
- vue_模板渲染
渲染 当获取到后端数据后,我们会把它按照一定的规则加载到写好的模板中,输出成在浏览器中显示的HTML,这个过程就称之为渲染. vue.js是在前端(即浏览器内)进行的模板渲染. 前后端渲染对比 前端渲 ...
- LinkedList与ArrayList的区别
我们都知道LinkedList和ArrayList相比: 1.LinkedList插入删除相对较快,而查询较慢: 2.ArrayList插入删除相对较慢,而查询很快(详细可查看从源码的角度分析List ...
- mac下更改Jupyter notebook工作目录
Jupyter notebook运行之后,默认的工作目录在mac下是个人文件夹,在windows下貌似也是如此.显然不太合理,需要修改它. 具体办法是: 进入终端命令行模式,输入下面的代码: jupy ...
- blinker语音控制Arduino/esp8266开关灯-滑动条使用-文本框交互
总链接: https://www.arduino.cn/thread-78393-1-1.html 语音控制:https://doc.blinker.app/?file=005-App%E4%BD% ...