首页 > 其他分享 >Codeforces Round 781 (Div. 2) B. Array Cloning Technique

Codeforces Round 781 (Div. 2) B. Array Cloning Technique

时间:2023-09-13 20:44:06浏览次数:53  
标签:std cnt 副本 cur int Technique Codeforces 元素 781

给一个长度为 \(n\) 的数组 \(a\) 。开始只有一份所给 \(a\) 的副本。你可以做以下两种操作:

  • 选择任意一个副本并且克隆它,然后将会多出一个克隆副本。
  • 交换两个元素,他们属于任意两个副本(可能是同一个)。

需要判断最小操作数,使有一个副本的所有元素相同。

观察一:只需要在开始的副本上让所有元素相同,不相同的元素丢到其他副本。

观察二:每次执行复制后,初始副本的相同元素是倍增的。

于是统计初始副本相同元素最多的个数 \(cur\) 。每次副本执行复制和交换后将有 \(cnt = cnt + cur + 1\) ,\(cur = cur + cur\) 。直到 \(cur \geq n\) ,\(cnt - (cur - n)\) 即答案。

  • 若只有 \(cur - n > 0\) 才能满足 \(cur - n \geq 0\) ,则 \(cur - n\) 为多出的交换数。
view
#include <bits/stdc++.h>
void solve() {
	int n = 0; std::cin >> n;
	std::vector<int> a(n+1);
	std::map<int, int> px;
	int cur = 0; for (int i = 1; i <= n; i++) std::cin >> a[i], px[a[i]]++, cur = std::max(cur, px[a[i]]);
	int cnt = 0; while (cur < n) {
		cnt += cur + 1;
		cur += cur;
	}
	std::cout << cnt - (cur - n) << '\n';
}
signed main() {
	int _ = 1; std::cin >> _;
	while (_--) solve();
	return 0;
} 

标签:std,cnt,副本,cur,int,Technique,Codeforces,元素,781
From: https://www.cnblogs.com/zsxuan/p/17700700.html

相关文章

  • Codeforces Round 787 (Div. 3) B. Make It Increasing
    给一个长为\(n\)的数组\(a_1,a_2,\cdots,a_n\quad(0\leqa_i\leq10^9)\)。可以执行以下操作任意次:选择任意一个\(a_i\)并且执行\(a_i=\lfloor\frac{a_i}{2}\rfloor\)。输出最小操作次数,使得数组所有元素变为严格递增。观察:数组一些位置变小,将数组变为严......
  • Codeforces Round 791 (Div. 2) A. AvtoBus
    已知有\(n\)个轮子,会有一个车队车来换轮,且恰好使用完这些轮子。只知道这些车中有\(4\)轮车和\(6\)轮车。你需要估计这个车队最少可能有多少车和最多可能有多少车,或判断这是完全不可能的。观察:\(4x+6y=n\),由裴蜀定理,当\(2\midn\)有解且\(2x+3y=\frac{n}{2}\)......
  • Codeforces Round 897 (Div. 2)
    目录写在前面ABCDE1/E2F写在最后写在前面比赛地址:https://codeforces.com/contest/1867。简略题解。还好没掉分。A令原数列中第\(k\)大对应\(k\)即可。///*By:Luckyblock*/#include<bits/stdc++.h>#defineLLlonglongconstintkN=4e4+10;//============......
  • 【题解】Educational Codeforces Round 141(CF1783)
    评价:educationalA.MakeitBeautiful题目描述:如果一个数组中存在一个数恰好等于该数前面所有数之和,那么这个数组就是丑的。如果一个数组不是丑的,就是美的。比如说:数组$[6,3,9,6]$是丑的,因为\(9=6+3\);数组$[5,5,7]$是丑的,因为第二个\(5=5\)。数组$......
  • Codeforces Round 897 (Div. 2)
    F.MostDifferentTree当\(n=2\)时,只能构造一条长度为\(2\)的链。当\(n\ge3\)时,对于\(i\)\((1\lei\len)\),以\(i\)作为根的树记为\(h_i\),考虑枚举树找一个大小为\(s\)的树\(t\),使得不存在任何一个\(h_i=t\),且\(s\)尽可能小,然后从\(1\)连一条链到该数的根......
  • Codeforces Round 897 (Div. 2)
    CodeforcesRound897(Div.2)A.green_gold_dog,arrayandpermutation分析:由题意:\[c_i=a_i-b_i\]\(c_i\)种类最多就是\(n\)个数都不同。若\(a_i\)不断变大,\(b_i\)不断变小,那么\(c_i\)会不断变大。代码:#include<bits/stdc++.h>usingnamespacestd;usingll......
  • Codeforces Round 897 (Div. 2) A~E
    CodeforcesRound897(Div.2)A~EA:原先数组里面最小的位置放最大的数,次小的放次大的即可。voidsolve(){ intn;cin>>n; for(inti=1;i<=n;i++){ intx;cin>>x; c[i]={x,i}; } sort(c+1,c+1+n); intnum=n; for(inti=1;i<=n;i++){ ans[c[i].second]=num;num--......
  • Codeforces Round 896 (Div. 2)
    CodeforcesRound896(Div.2)A.MakeItZero代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingi128=__int128;intn,m;voidsolve(){scanf("%d",&n);vector<int>a(n+1);for(inti......
  • CodeForces 542B Duck Hunt
    洛谷传送门CF传送门首先转化一下,让鸭子不动,猎人往右移动,就相当于开的相邻两枪距离\(>m\)。设\(f_{x,i}\)为仅考虑\(r\lex\)的鸭子,上一次在\(i\)开枪,能打到的最大鸭子个数。\(f_{x-1}\tof_x\)时,首先有\(f_{x,i}=f_{x-1,i}\)。我们先找到所有\(r=x\)......
  • Codeforces Round 896 (Div. 1)
    Preface不管怎么说,最后还是被我苟上橙名了(虽然刚好2100整,不多不少)感觉我在1900~2100之间卡了好久好久,反观我的队友都是打上紫名后随便两三场就打上橙了,狠狠地羞辱我这个铁混子由于暑假集训打的校内排名比较高,作为新队伍也拿到了今年的一场CCPC+一场ICPC的名额,虽然要自费出行但......