传送门: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. 1 #include<bits/stdc++.h>
  2. 2 #define ll long long
  3. 3 using namespace std;
  4. 4
  5. 5 ll a[100100];
  6. 6 ll b[100100];
  7. 7
  8. 8 ll cmp(ll x,ll y)
  9. 9 {
  10. 10 return x>y;
  11. 11 }
  12. 12
  13. 13 int main()
  14. 14 {
  15. 15 ios::sync_with_stdio(false);
  16. 16 cin.tie(0);
  17. 17 cout.tie(0);
  18. 18 ll n,m,d;
  19. 19 cin>>n>>d>>m;
  20. 20 for(ll i=0;i<n;i++) cin>>a[i];
  21. 21 sort(a,a+n,cmp);
  22. 22 ll ans=0;
  23. 23 ll k=0,p=0,q=0;
  24. 24 for(ll i=0;i<n;i++){
  25. 25 if(a[i]<=m) b[k++]=a[i];
  26. 26 }
  27. 27 ll cnt=0;
  28. 28 for(ll i=0;i<n-k;i++){
  29. 29 if(cnt>=n) break;
  30. 30 cnt++;
  31. 31 ans+=a[i];
  32. 32 cnt+=d;
  33. 33 p++;
  34. 34 }
  35. 35 p--;
  36. 36 for(ll i=cnt;i<n;i++) ans+=b[q++];
  37. 37 if(k==0) {cout<<ans<<endl;return 0;}
  38. 38 if(cnt>n){
  39. 39 ll res=0;
  40. 40 ll pp=cnt-n;
  41. 41 pp=d-pp;
  42. 42 for(ll i=q;i<min(q+pp,k);i++) res+=b[i];
  43. 43 q+=pp;
  44. 44 ans+=res;
  45. 45 }
  46. 46 else{
  47. 47 ll res=0;
  48. 48 for(ll i=q;i<min(q+d,k);i++) res+=b[i];
  49. 49 q+=d;
  50. 50 ans+=res;
  51. 51 }
  52. 52 while(q<k&&p>=0){
  53. 53 ll res=0;
  54. 54 for(ll i=q;i<min(q+d+1,k);i++) res+=b[i];
  55. 55 if(res>a[p]) ans-=a[p],ans+=res,p--;
  56. 56 else break;
  57. 57 q+=d+1;
  58. 58 }
  59. 59 cout<<ans<<endl;
  60. 60 return 0;
  61. 61 }

Codeforces Round #664 (Div. 2) D. Boboniu Chats with Du的更多相关文章

  1. 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的最大 ...

  2. 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 ...

  3. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  4. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  5. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  6. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  7. 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 ...

  8. 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 ...

  9. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

随机推荐

  1. [Java基础]——String类

    此篇博客主要整理Java中的String类的使用. 一.String    1.1  String 的定义 上图是jdk中对String类的定义,得到的信息有: ①.String类声明为final的, ...

  2. 【MySQL 高级】架构介绍

    MySQL高级 架构介绍 MySQL 简介 MySQL 安装 Docker 安装 参考链接 Linux 安装 参考链接 MySQL 配置文件 log-bin:二进制日志文件.用于主从复制.它记录了用户 ...

  3. python_元组(tuple)

    #tuple(),元组不可以修改,不能对其进行增加或删除操作,元组是有序的 #1.定义 tu_1 = () #定义一个空元组 tu_2 = (1,2,'alex',[3,4],(5,6,7),True ...

  4. torch.nn 的本质

    torch.nn 的本质 PyTorch 提供了各种优雅设计的 modules 和类 torch.nn,torch.optim,Dataset 和 DataLoader 来帮助你创建并训练神经网络.为 ...

  5. docker 创建数据卷容器

    数据卷容器 --volumes-from 容器名/id 先起一个容器 docker run -it --name docker01 centos 然后同步 docker01 的数据卷 --volume ...

  6. 【高级排序算法】2、归并排序法的实现-Merge Sort

    简单记录 - bobo老师的玩转算法系列–玩转算法 -高级排序算法 Merge Sort 归并排序 Java实现归并排序 SortTestHelper 排序测试辅助类 package algo; im ...

  7. Windows Server 2012 R2远程桌面默认端口修改

    修改3389默认端口可使服务器安全性进一步提升,可以避免阻断大部分的恶意暴力密码爆破. 在开始--运行菜单里,输入regedit 或者: 远程登陆服务器选择系统桌面中的"Windows Po ...

  8. AmoebaNet:经费在燃烧,谷歌提出基于aging evolution的神经网络搜索 | AAAI 2019

    论文提出aging evolution,一个锦标赛选择的变种来优化进化算法,在NASNet搜索空间上,对比强化学习和随机搜索,该算法足够简洁,而且能够更快地搜索到更高质量的模型,论文搜索出的Amoeb ...

  9. CF76A Gift

    题目描述 有一个国家有N个城市和M条道路,这些道路可能连接相同的城市,也有可能两个城市之间有多条道路. 有一天,有一伙强盗占领了这个国家的所有的道路.他们要求国王献给他们礼物,进而根据礼物的多少而放弃 ...

  10. 如何封装Promise对象?

    最近看到了一个有趣的Promise的方法,这里记录下来 <script> class MyPromise { constructor(executor) { // 初始化state赋值为p ...