首页 > 其他分享 >ABC143F 题解

ABC143F 题解

时间:2023-06-29 17:13:53浏览次数:42  
标签:cnt int 题解 long ABC143F include

前言

题目传送门!

更好的阅读体验?

很有趣的题。提供一种和现有题解略微不同的做法。

思路

突破点在于反着想。当最多能取 \(x\) 次时,每次我取的不同数字的数量,最多是多少

统计一下每个数字出现的次数 \(cnt_i\)。那么这个最多次数应为

\[\left\lfloor\dfrac{\sum\min(cnt_i, x)}x\right\rfloor \]

不妨设其为 \(T(x)\),则 \([T(x+1) + 1, T(x)]\) 的答案都是 \(x\)。

于是直接求即可。唯一的问题是如何快速求 \(T(x)\)。发现所有 \(T(i)\) 都得求出来,所以套个指针扫一遍即可,具体看代码。

线性复杂度。

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 3e5 + 5;
int a[N], tt[N], cnt[N];
long long tmp[N], f[N], ans[N];
int main()
{
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) scanf("%d", &a[i]), tt[i] = a[i];
	
	sort(a + 1, a + n + 1), sort(tt + 1, tt + n + 1);
	int cur = unique(tt + 1, tt + n + 1) - tt - 1;
	for (int i = 1; i <= n; i++) a[i] = lower_bound(tt + 1, tt + cur + 1, a[i]) - tt;
	
	for (int i = 1; i <= n; i++) cnt[a[i]]++;
	sort(cnt + 1, cnt + cur + 1);
	for (int i = 1, j = 0; i <= cur; i++)
		while (j < cnt[i])
			tmp[++j] = cur - i + 1;
	long long sum = 0;
	for (int i = 1; i <= n; i++) sum += tmp[i], f[i] = sum / i;
	
	for (int i = 0; i <= n; i++)
		for (int j = f[i + 1] + 1; j <= f[i]; j++)
			ans[j] = i;
	for (int i = 1; i <= n; i++) printf("%lld\n", ans[i]);
	return 0;
}

希望能帮助到大家!

标签:cnt,int,题解,long,ABC143F,include
From: https://www.cnblogs.com/liangbowen/p/17514668.html

相关文章

  • 「ARC133E」Cyclic Medians 题解
    本文网址:https://www.cnblogs.com/zsc985246/p/17513317.html,转载请注明出处。传送门「ARC133E」CyclicMedians题目大意给定\(n,m,V,A\),你需要计算所有长为\(n\)、值域为\([1,V]\)的整数序列\(x\)和长为\(m\)、值域为\([1,V]\)的整数序列\(y\)形成的序列对\((x_......
  • Codeforces[CF1036B]Diagonal Walking v.2题解
    题目大意很明显,这道题就是求k步之内到达点\((a,b)\),然后尽量走对角线,求能走对角线的最大值。做题思路首先明白一个事实,即一个对角线可以通过增加一步而抵达点不变,如图:我们可以这样思考这道题,在到达目的地以后,剩余步数如果为双数,则在对角线来回走,最后会到目的地。但如果剩......
  • Switches and Lamps 题解
    题目传送门一道枚举题。首先我们需要知道什么开关才能被去掉,题目要求去掉这个开关后所有的灯依然能够开启。也就是说,这个开关能打开的所有灯都可以由其它开关代替。思路清晰了,就比较好做。我们可以用一个数组存储下每一盏灯可以被几个开关开启,如果有一盏灯只能被\(1\)个开关......
  • P1552 [APIO2012] 派遣 题解
    一、题目描述:给你一个$n$个点的有根树,每个点有两个参数$w$和$v$。再给出一个数$m$。对于每一个点$u$,设它的子树内最多可以选择$k_u$个点$a_1,a_2,...,a_{k_u}$,使得$\sum_{i=1}^kw_{a_i}\lem$。那么点$u$的价值为$v_u\timesk_u$,求$max(\su......
  • 前端打包部署后接口BASE_URL不对问题解决办法
    在前端打包部署时,为了免去不同环境打包的麻烦,项目用的流水线触发方式。在这里不细说,重点说说下面情况。当项目提交打包部署后,访问压测环境或者生产环境的地址来使用项目时,发现接口报错404。 在NETWORK里发现接口的BASEURL和当前环境需要调用的后端baseurl不同。主要问题在于......
  • 解密2.0题解
    解密题目首先查看题目的\(\LaTeX\)源代码,发现在答案后面有一个。可以点击。点击这个句号,来到线索\(1\)。线索\(1\):在源代码里发现有base64这个字眼,于是就把后面一长串的字符aW46MiAzCm91dDpKYXNvbmN3eCBjYW4ndCBBSyBDU1BK扔到base64解密。解密得出:in:23out:Jasoncwx......
  • CF1834 题解
    CF1834题解A考虑答案与元素位置无关,只与\(1\)和\(-1\)的个数有关。要求\(1\)必须多于或等于\(-1\),并且\(-1\)个数为偶数。分讨:序列中\(num(1)\geqnum(-1)\),只需要看\(num(-1)\)正负性,奇数1步,偶数0步序列中\(num(1)<num(-1)\),先通过\(-1\)变\(1\)将数目补到第一种情况,再做......
  • mac打开ddms卡住的问题解决
    https://blog.csdn.net/qq_35244415/article/details/110656444?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-110656444-blog-88994745.235^v38^pc_relevant_default_base&depth_1-utm_source=distribute.......
  • P4630 [APIO2018] 铁人两项 题解
    一、题目描述:给你一个$n$个点,$m$条边的无向图。图不一定联通求出点对$(u,c,v)$的数量,使得点$u$存在一条经过点$c$到达点$v$的无向图。数据范围:$1\len\le1\times10^5,1\lem\le2\times10^5$ 二、解题思路:算是圆方树比较模板的题了......
  • B0626 模拟赛题解
    原题链接前言重庆一位金牌大佬出的。感受:除了最后一题,感觉难度不如C组,甚至没之前D组题难?T1浪费2.5h,最后还是打表秒了。T2想出正解,但发现是数据结构题,最后40min怒打100行,差点打出正解。T3花20min打出20分部分分,赛后发现XD秒了(tql)。T4看题浪费5min......