Codeforces Round #664 (Div. 2) D. Boboniu Chats with Du
传送门:cf1395D
题意
给定一个长度为n的数组a[i]为当天说话的有趣值,如果a[i]>m,那么在 i 之后有d天不能说话。否则可以每天都说话。找到一个排列使得n天有趣值总和最大,问有趣值总和的最大值是多少。
题解
很明显用贪心。先取>m的有趣值直到取不下。根据样例1的解释可以看出将一个大于m的值放在最后,前边放<m的会更优,所以此时有两种情况,如果取了的p个大于m的值p*(d+1)(p个大于m的总共占了多少天)大于n,那么就要找到最后一个能说话的天后不能说话的天数,即d-(p*(d+1)-n),然后可以加上<m最大的前d-(p*(d+1)-n)天,相当于把这段放在最后说话的那天前边。如果p*(d+1)<=n,剩下的位置就可以直接由大到小放<m的有趣值,因为最后一个>m的值后边也有d天不能说话,所以也将最后一个>m的值移到最后,相当于再加上d个<m的值,和前边的做法一样。然后就可以开始用<m的段替换>m的段,如果长度为d+1的<m的剩余的值和的最大值比所取的>m的值的最小值大,那么就可以直接用这一段替代>m的那一段,直到没有这样的段可以替代位置。
说的绕绕的,当时想的就绕绕的,代码还行,好像是有更简便的做法的。
代码
1 #include<bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4
5 ll a[100100];
6 ll b[100100];
7
8 ll cmp(ll x,ll y)
9 {
10 return x>y;
11 }
12
13 int main()
14 {
15 ios::sync_with_stdio(false);
16 cin.tie(0);
17 cout.tie(0);
18 ll n,m,d;
19 cin>>n>>d>>m;
20 for(ll i=0;i<n;i++) cin>>a[i];
21 sort(a,a+n,cmp);
22 ll ans=0;
23 ll k=0,p=0,q=0;
24 for(ll i=0;i<n;i++){
25 if(a[i]<=m) b[k++]=a[i];
26 }
27 ll cnt=0;
28 for(ll i=0;i<n-k;i++){
29 if(cnt>=n) break;
30 cnt++;
31 ans+=a[i];
32 cnt+=d;
33 p++;
34 }
35 p--;
36 for(ll i=cnt;i<n;i++) ans+=b[q++];
37 if(k==0) {cout<<ans<<endl;return 0;}
38 if(cnt>n){
39 ll res=0;
40 ll pp=cnt-n;
41 pp=d-pp;
42 for(ll i=q;i<min(q+pp,k);i++) res+=b[i];
43 q+=pp;
44 ans+=res;
45 }
46 else{
47 ll res=0;
48 for(ll i=q;i<min(q+d,k);i++) res+=b[i];
49 q+=d;
50 ans+=res;
51 }
52 while(q<k&&p>=0){
53 ll res=0;
54 for(ll i=q;i<min(q+d+1,k);i++) res+=b[i];
55 if(res>a[p]) ans-=a[p],ans+=res,p--;
56 else break;
57 q+=d+1;
58 }
59 cout<<ans<<endl;
60 return 0;
61 }
Codeforces Round #664 (Div. 2) D. Boboniu Chats with Du的更多相关文章
- Codeforces Round #664 (Div. 2) C. Boboniu and Bit Operations
传送门:cf1395C 题意 c[i]=a[i]&b[j],b[j]是b数组中任意一个,求c[1] | c[2] | ... | c[n]最小值. 题解 经典的二进制枚举答案,因为a和b的最大 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #262 (Div. 2) 1004
Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
随机推荐
- java环境配置-win10(傻瓜式教程)
java环境配置 – 小学弟要开始学java了,由于本人较懒,表达能力有限,所以来这,写一篇简单的指导,帮学弟装下java环境. 首先打开浏览器,输入这个网址https://www.oracle.co ...
- 在Windows中安装MongoDB--图文并茂
在Windows环境下安装MongoDB的方法 (1)下载MongoDB Windows版: 进入MongoDB官网 (2)设置数据文件和日志文件的存放目录: 打开刚刚安装MongoDB的目录咋bin ...
- .NET 调整图片尺寸(Resize)各种方法
本文中如无特别说明 .NET 指 .NET 5或者更高版本,代码同样可用于 .NET Core 前言 调整图片尺寸最常用的场景就是生成缩略图,一般为保持纵横比缩小,如果图片放大会使图片变得模糊,如果确 ...
- FAT32、NTFS、exFAT有什么区别?
文件系统 我们经常会对电脑硬盘.U盘.移动硬盘进行格式化,而在格式化硬盘的时候会弹出文件系统的选项,分别有FAT32.NTFS.exFAT三种格式,那么FAT32.NTFS.exFAT有什么区别? 在 ...
- Loadrunner与kylinPET的能力对比测试--web动态请求
概述 在<性能测试工具选择策略--仿真度对比测评分析报告>一文详细分析了使用相同的web页面,分别使用LoadRunner,Jmeter,kylinTOP工具进行录制脚本并执行得出在静态请 ...
- Java开发手册之数据库规约
1.不要使用 count(列名)或 count(常量)来替代 count(*),count(*)是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关. 2.cou ...
- Head First 设计模式 —— 15. 与设计模式相处
模式 是在某情境(context)下,针对某问题的某种解决方案. P579 情景:应用某个模式的情况 问题:你想在某情境下达到的目标,但也可以是某情境下的约束 解决方案:一个通用的设计,用来解决约束. ...
- 【Linux】使用grep快速比较两个文件不同
两个文件的比较,会有同学说使用diff,和vimdiff就可以快速比较,为什么还要使用grep呢? 有些时候,diff和vimdiff的时候环境不符合,这样的情况,就可以使用grep来解决这个问题. ...
- AWS IoT Greengrass是什么?V1和V2版本及其差异
AWS IoT Greengrass Greengrass主要是用于边缘计算或者机器学习有关,对于详细了解请阅读结尾处的官方文档,文档内容也较为丰富. 目录 AWS IoT Greengrass ...
- 与图论的邂逅07:K短路
在做最短路的题时我们不免会碰到许多求次短路的题,然而我们也能很快地想到解决的办法: 用dijkstra跑一遍最短路,当终点第二次被取出时就是次短路了.时间复杂度为O((N+M)logN).实际上前面得 ...