Codeforces Round #521 (Div. 3)  E. Thematic Contests

题目传送门

题意:

现在有n个题目,每种题目有自己的类型
要举办一次考试,
考试的原则是
每天只有一种题目类型
一种题目类型只能出现在一天
每天的题目类型不能相同,
而且后一天的题目数量必须正好为前一天的两倍,第一天的题目数量是任意的
求怎么安排能使题目尽量多。注意:不是天数尽量多

思路:

首先我们知道一件事,题目属于哪种类型并不重要,重要的是每种类型的个数
所以我们先统计出所有类型的个数,存进一个数组,
而最终最优解一定是按照题目数量从小到大来的,所以我们对该数组进行排序
而我们怎么确定最终怎么选择呢,我们发现最终怎么选择取决于第一天怎么选择
而且只要确定了第一天的题目数。我们要看哪个过程可以优化
第一天的题目数并不满足二分的性质,我们就考虑优化能选就选这个原则
在排好序的数组上我们可以通过lower_bound快速找到>=当前所需数目的下标pos
之后让pos++,继续下一次查找,这样我们最多查找log次就能完成check
于是这道题就是O(n) O(n)O(n)枚举第一天的题目数,O(logn) O(logn)O(logn)check,总复杂度O(nlogn) O(nlogn)O(nlogn)

原文来自:https://blog.csdn.net/qq_38891827/article/details/84149250

代码:

#include<bits/stdc++.h>
using namespace std;
#define N 200005
int x[N];
map<int,int>mp;
int n;
int main()
{while(~scanf("%d",&n)){mp.clear();for(int i=1;i<=n;i++){int k;scanf("%d",&k);mp[k]++;}map<int,int>::iterator it;int tot=0;for(it=mp.begin();it!=mp.end();it++){x[tot++]=(*it).second;}sort(x,x+tot);long long ans=0;for(int i=1;i<=n;i++){long long tmp=0;int pos=0;for(int j=i;j<=n;j*=2){int t=lower_bound(x+pos,x+tot,j)-x;if(t==tot) break;tmp+=j;pos=t+1;}ans=max(ans,tmp);}printf("%lld\n",ans);}return 0;
}

View Code

转载于:https://www.cnblogs.com/zhgyki/p/10338774.html

Codeforces Round #521 (Div. 3) E. Thematic Contests(思维)相关推荐

  1. Codeforces Round #521 (Div. 3) B. Disturbed People 思维

    题解 题目大意 n个灯0关灯1开灯 101则中间的睡不着 问最少关掉多少个灯可以全都能睡着 遇见101则将后面的1的灯泡关掉 这样解决10101的问题 计数输出即可 AC代码 #include < ...

  2. Codeforces Round #587 (Div. 3) C. White Sheet 思维

    传送门 文章目录 题意: 思路: 题意: 给你一个白色的矩形和俩个黑色的矩形,问白色被黑色覆盖后还能不能看到. 思路: 经典被简单题卡. 一开始写了个自我感觉很对的做法,结果wa41wa41wa41, ...

  3. Codeforces Round #636 (Div. 3) E. Weights Distributing 思维 + bfs

    传送门 文章目录 题意: 思路: 题意: n≤2e5,m≤2e5n\le2e5,m\le2e5n≤2e5,m≤2e5 思路: 怎么感觉每场div3div3div3都有一个巧妙的图论题. 首先如果只有两 ...

  4. Codeforces Round #617 (Div. 3) F. Berland Beauty 思维

    传送门 文章目录 题意: 思路: 题意: 给定一棵树,再给定若干两点最短路之间边权的最小值,让你给树的边权赋值,使得满足给定的条件,如果不存在输出−1-1−1. 思路: 观察一个性质,加入经过这条边的 ...

  5. Codeforces Round #521 (Div. 3)

    题目链接:http://codeforces.com/contest/1077 A.Frog Jumping 解题思路:作差再判断最后是否还要向右跳一次即可. AC代码: 1 #include< ...

  6. B. Disturbed People(模拟) Codeforces Round #521 (Div. 3)

    原题链接: https://codeforces.com/contest/1077/problem/B 样例: Examples Input 10 1 1 0 1 1 0 1 0 1 0 Output ...

  7. Codeforces Round #521 (Div. 3) B - Disturbed People (贪心)

    题目链接:http://codeforces.com/contest/1077/problem/B 题意:给你一长度为n的01序列.0表示当前位置的房子灯是灭的,1表示当前房子的位置灯是亮的.判断某个 ...

  8. CodeForces Round #521 (Div.3) B. Disturbed People

    http://codeforces.com/contest/1077/problem/B There is a house with nn flats situated on the main str ...

  9. Codeforces Round #521 (Div.3)题解

    A过水,不讲 题解 CF1077B [Disturbed People] 这题就是个显而易见的贪心可是我考场上差点没想出来 显然把一户被打扰的人家的右边人家的灯关掉肯定比把左边的灯关掉 从左到右扫一遍 ...

  10. Codeforces Round #521 (Div. 3): F. Pictures with Kittens(DP+单调队列)

    题意: 你有n幅画,第i幅画的好看程度为ai,再给你两个数字k,x,表示你要从中选出刚好x幅画,并且相邻两幅画的距离不能≥k,好看程度之和最大能多少,选不出来输出-1,F1数据范围<200,F2 ...

最新文章

  1. java 字符串原子变量,如何在java中提供原子读/写2个变量?
  2. DDoS攻击的大量增加给企业带来了新的威胁——Vecloud
  3. 实例讲解sed的9种常见用法
  4. Android多个imei如何获取,如何在Android 10中获取IMEI号,这是获取在Android 10及以下Android 10中获取IMEI号的代码...
  5. T-SQL查询高级—SQL Server索引中的碎片和填充因子
  6. mysql数据库分表备份脚本_mysql 分库分表备份脚本
  7. 7-2 地下迷宫探索 (30 分)(C语言实现)
  8. 作者:徐优俊(1990-),男,北京大学前沿交叉学科研究院博士生。
  9. Linux中如何打开trn文件,如何通过trn日志文件恢复SQL Server
  10. 吴恩达 深度学习 编程作业(1-3)- Planar data classification with one hidden layer(平面花形状)
  11. SpUtil多样加密存储,兼容android9.0
  12. Boost正则表达式库regex常用search和match示例 - 编程语言 - 开发者第2241727个问答
  13. XAF How to: Implement Domain Components(如何实现领域构件)
  14. 多语言机器翻译 | (1)多语言翻译模型简介
  15. 计算机重新启动进不去系统,电脑关机重启进不了系统怎么办
  16. 戴尔r410服务器虚拟磁盘,DELL服务器R410原装 SAS 6/IR RAID卡 阵列控制器卡 支持RAID0,1...
  17. PVE系统更换大硬盘的扩容方法
  18. 从实习生到算法专家,他只用了2年!
  19. ajax换头像,ajax切换明星头像!
  20. android自动修音,唱吧后期处理声音软件下载-唱吧后期修音软件手机版下载 _5577安卓网...

热门文章

  1. git:info: detecting host provider for ‘https://gitee.com/‘...
  2. 18-09-20 关于Xlrd和Xlwt的初步学习
  3. cad审图软件lisp_CAD审图软件下载_小智审图(建筑行业智能助手) 3.3.1 个人版_极速下载站_软件下载...
  4. 808通讯协议技术规范消息ID:0x0704数据分析,后附go代码
  5. 实践:Linux上安装nginx后同一服务器进行多域名反向代理
  6. 基于SpringBoot+html超市进销存管理系统
  7. SpringBoot项目中遇到的问题
  8. 计算机组成原理练习题(第6章 计算机的运算方法(中))
  9. 从键盘交互式输入-一个人的18位的身份证号,以类似于“2001年09月12日”的形式输出该人的出生日期。
  10. 学习笔记-Wood‘s anomalies