题面:

传送门

题目描述:

题意:确定最大的x,使去除掉前x天的其中一天后,所有不同数字的数量相等。
 

题目分析:

可能是我太久没打cf了,水题都做不出来。
这道题的关键在于:要记录相同数量,的不同数字,有多少个。为什么要这样记录呢?我们分析一下符合题意的有多少种情况:
1.每个不同的数字只出现1次,例:1,2,3,4,5
2.只有一种数字,例:1,1,1,1,1
3.只有一种数字出现1次,其他数字出现的次数相同,例:1,1,1,2,2,2,3
4.有一种数字出现的次数比其他数字都多出1次,例:1,1,2,2,3,3,3
从这些情况可以看出:用“普通”的方法(直接遍历循环检查次数)是行不通的(会超时,这个是O(n^2)的做法)。所以问题就在于如何优化检查“次数”。这时我们只要:多开一个记录 “相同数量有多少个不同数字” 的数组,举个例子:
我们开一个叫same_cnt的数组,那么对于这组数据:1,1,2,2,3,3,4,4,4
其中same_cnt[2] = 3(因为数字1,2,3的数量是2,共3个)
same_cnt[3] = 1(因为数字4的数量是3,共1个)
接下来,我们从小到大枚举x的值就行了,判断可以用这个辅助数组O(1)判断出来。
 
 
AC代码:
 1 #include <bits/stdc++.h>
2 using namespace std;
3 const int maxn = 1e5+5;
4 int u[maxn];
5 int cnt[maxn];
6 int same_cnt[maxn];
7
8 int main(){
9 int n;
10 scanf("%d", &n);
11 for(int i = 1; i <= n; i++){
12 scanf("%d", &u[i]);
13 }
14
15 int res = 0;
16 int mx = 0;
17 for(int i = 1; i <= n; i++){
18 cnt[u[i]]++;
19 same_cnt[cnt[u[i]]-1]--;
20 same_cnt[cnt[u[i]]]++;
21
22 mx = max(mx, cnt[u[i]]); //小技巧,自己领会一下
23 int ok = 0;
24
25 if(same_cnt[1] == i) ok = 1; //第一种情况:数量为1的有i个
26 else if(same_cnt[i] == 1) ok = 1; //第二种情况:数量为i的有1个
27 //第三种情况
28 else if(same_cnt[1] == 1 && same_cnt[mx]*mx == i-1) ok = 1;
29 //第四种情况
30 else if(same_cnt[mx] == 1 && same_cnt[mx-1]*(mx-1) == i-mx) ok = 1;
31
32 if(ok) res = i;
33 }
34
35 printf("%d\n", res);
36 return 0;
37 }
 
 
 
 

Codeforces Round #558 B2. Cat Party (Hard Edition)的更多相关文章

  1. Codeforces Round #558 (Div. 2)

    目录 Codeforces Round #558 (Div. 2) 题解 A Eating Soup B Cat Party C Power Transmission D Mysterious Cod ...

  2. Codeforces Round #558 (Div. 2)-Cat Party (Hard Edition)-(前缀和 + 模拟)

    http://codeforces.com/problemset/problem/1163/B2 题意:有n天,每天有一个颜色,截取前x天,随便抽掉一天,使剩下的各个颜色出现的次数相等. 解题,也可以 ...

  3. Codeforces Round 558(Div 2)题解

    这场比赛没有打,后来和同学们一起开了场镜像打…… B是SB题结果WA了5发…… C是SB题结果差5min调出……虽然中间有个老师讲题吃掉了1h D是比较神仙的题(2200),但是做出来了?算是比较超常 ...

  4. Codeforces Round #558 (Div. 2)B(SET,模拟)

    #include<bits/stdc++.h>using namespace std;int a[100007];int cnt[100007];int main(){    int n; ...

  5. Codeforces Round #558 (Div. 2)C(计算几何,排列组合,模拟)

    #include<bits/stdc++.h>using namespace std;typedef struct{ double k,b;}node;node k[1000007];bo ...

  6. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) B. Problems for Round 水题

    B. Problems for Round 题目连接: http://www.codeforces.com/contest/673/problem/B Description There are n ...

  7. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) B

    B. Problems for Round time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  8. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition)只有A题和B题

    连接在这里,->点击<- A. Bear and Game time limit per test 2 seconds memory limit per test 256 megabyte ...

  9. [Educational Codeforces Round 16]D. Two Arithmetic Progressions

    [Educational Codeforces Round 16]D. Two Arithmetic Progressions 试题描述 You are given two arithmetic pr ...

随机推荐

  1. 2.使用Helm构建ElasticSearch集群

    作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-05-24 16:08:53 星期五 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...

  2. python了解未知函数的方法

    ?func 如图:

  3. sscanf的最基础用法(非原创)

    1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 int main(){ 6 ch ...

  4. Tomcat连接配置

    DBCP连接池配置: <bean class="org.apache.tomcat.jdbc.pool.PoolProperties"> <property na ...

  5. vue中怎么动态生成form表单

    form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成组件.支持3个UI框架,并且支持生成任何 Vue 组件.内置20种常用表单组件和自定义组件,再复杂 ...

  6. Error: Cannot find module 'koa-router'

    Error: Cannot find module 'koa-router' koa-router !== koa-route # install OK $ yarn add koa-router h ...

  7. queueMicrotask & EventLoop & macrotask & microtask

    queueMicrotask https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicro ...

  8. convert image to base64 in javascript

    convert image to base64 in javascript "use strict"; /** * * @author xgqfrms * @license MIT ...

  9. flutter & i18n & L10n & json

    flutter & i18n & L10n & json https://marketplace.visualstudio.com/items?itemName=esskar. ...

  10. nasm astrrev函数 x86

    xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...