Codeforces Round #568 (Div. 2)C2. Exam in BerSU (hard version)

贪心+暴力

大致题意:N个人考试,每个人花费的时间是a[i],他们总共花费的时间不能超过M,求如果第i个人想要完成考试的话前面最少得多少个人不能考试

一开始拿到题以为是优先队列,然后不断暴力前缀和,发现这样如果还是复杂度有O(n^2×logn)2e5的数据……自闭…… 后来才发现原来时间数据最大也就100,可以用一个flag数组记录下花费时间x一共有多少个人,从大到小暴力减到小于等于M为止

我处理的方式可能有些不同,理解一下为什么不是m而是m-x

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<queue>
#include<map>
#define ll long long
#define pb push_back
using namespace std;
const int maxn=2e5+7;
const int MAX_N=109;
int ans[maxn];
int flag[MAX_N];int main()
{int n,m,sum=0,x;cin>>n>>m;for (int i=0;i<n;i++){scanf("%d",&x);if (sum<=m-x)ans[i]=0;else{int sum1=sum;int num=0;for (int j=100;j>=1;j--){if (sum1-flag[j]*j<=m-x){if ((sum1-m+x)%j==0) num+=(sum1-m+x)/j;else num+=((sum1-m+x)/j)+1;ans[i]=num;break;}else{sum1-=flag[j]*j;num+=flag[j];if (sum1<=m-x){ans[i]=num;break;}}}}sum+=x;flag[x]++;//放在最后的原因是:放前面可能会把flag[x]减成0,那就相当于还是没能参加考试}for (int i=0;i<n;i++)cout<<ans[i]<<" ";cout<<endl;return 0;
}

七夕快乐!
(愿天下有情人终成兄妹(^__0

Codeforces Round #568 (Div. 2)C2. Exam in BerSU (hard version)相关推荐

  1. Codeforces Round #579 (Div. 3) F2. Complete the Projects (hard version) dp + 贪心

    传送门 文章目录 题意: 思路: 题意: 思路: 排序方式跟easyeasyeasy版本的一样,但是hardhardhard版本是输出最多能选多少,所以我们对b<0b<0b<0的情况 ...

  2. Codeforces Round #579 (Div. 3) F1. Complete the Projects (easy version) 排序 + 贪心

    传送门 文章目录 题意: 思路: 题意: 思路: 比较直观的想法就是对于bi≥0b_i\ge0bi​≥0的项目,我们将aia_iai​从小到大排序,让后依次加bib_ibi​,如果有取不到的,显然就无 ...

  3. Codeforces Round #726 (Div. 2) E2. Erase and Extend (Hard Version) 贪心

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的串sss,你有两个操作可以使用: (1)(1)(1)从sss的结尾删除一个字母. (2)s=s+s(2)s=s+s(2)s=s+s. 让 ...

  4. Codeforces Round # 555 (Div. 3) C2. Increasing subsequence (complicated version) (贪心)

    题目链接:http://codeforces.com/contest/1157/problem/C2 当左右两边数字相同时,需要判断一下取哪边能得到更长的递增序列 #include <iostr ...

  5. Codeforces Round #555 (Div. 3) c2 d e f

    c2:Increasing Subsequence (hard version) 那边小取那边,然后相等比较后面的长度 #include<bits/stdc++.h> using name ...

  6. 差分 ---- Codeforces Round #672 (Div. 2):C2. Pokémon Army (hard version)[差分的思想]

    题目链接 题目大意:就算给你一序列,按照顺序出若干个数组成一个的序列,然后对这个序列定义一个权值就算奇数位置的和减去偶数位置的和,问你能的到的最大的权值是多少? **a1 - a2 + a3 - a4 ...

  7. Codeforces Round #672 (Div. 2) C2 - Pokémon Army (hard version)(贪心,维护变化值)

    x数组里选一个子数组y(原数组顺序),y1-y2+y3-y4+- 的最大值 然后还有q次交换操作,每次修改之后都要输出新的最大值 (1)如果没有修改,单纯对于当前数组考虑,我们最后选出来的点肯定是波峰 ...

  8. Codeforces Round #809 (Div. 2)。D2. Chopping Carrots (Hard Version)

    翻译: 这是这个问题的难解版本.版本之间的唯一区别是

  9. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

最新文章

  1. 学会针对永洪API接口的性能测试,工作效率提升百倍
  2. nodejs+express4.0+mongodb安装方法 for Linux, Mac
  3. Qt修炼手册8_常用的容器类QVector和QList
  4. 本地提交到yarn_Hadoop(四) Yarn
  5. 你知道void和Void的区别吗
  6. C、C++函数集 说明
  7. 【剑指 offer】(十)—— 二进制形式 1 的个数
  8. js关于两个字符串的加减乘除运算
  9. 取消ajax请求时页面闪烁,基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法...
  10. Windows软件打包方法
  11. HTML里css画蝴蝶,纯css3制作煽动翅膀的蝴蝶的示例
  12. BLANK_TRIMMING 参数介绍
  13. [转帖]16nm国内最先进 兆芯展示x86 KX-6000八核处理器
  14. 好好说话之ret2csu
  15. 职业能力测试之逻辑(一)
  16. Photoshop滤镜给城市夜空添加满天星光
  17. Linux创建用户和密码相关的命令useradd、groupadd、passwd和userdel应用
  18. [护肤] 去皱汇总+19个民间小偏方
  19. 录屏程序之屏幕实时录制保存成AVI视频文件
  20. 美团杯2020:查查查乐乐(dp)

热门文章

  1. 边缘计算 - 云计算厂商的下一个战场
  2. Python2/3 字符串转16进制 16进制转字符串
  3. 【Shiro原理一】shiro:hasPermission 隐藏页面无权访问的资源
  4. Multispace多元空间基于Conflux树图生态,打造全国首个元宇宙硅谷
  5. Java中设置session的详细解释
  6. 2022年全球市场美白精华总体规模、主要生产商、主要地区、产品和应用细分研究报告
  7. 【C语言】——迷宫问题详解
  8. 三平寺修建工程竣工暨三平祖师公上座揭幕仪式
  9. 我们为什么要叫“鲜枣课堂”?
  10. Module “child_process“ has been externalized for browser compatibility and cannot