首页 > 其他分享 >CF1868B2 Candy Party (Hard Version) 题解

CF1868B2 Candy Party (Hard Version) 题解

时间:2023-11-02 19:55:06浏览次数:48  
标签:__ lg CF1868B2 int 题解 Hard cnt maxn ave

Problem - 1868B2 - Codeforces

Candy Party (Hard Version) - 洛谷

  • 相信大家已经看过 Simple Version ,这题和上题不同之处就在于如果 \(b_i = 2^x\) ,他可以被分解成 \(2^x\) 或 \(2^{x+1}-2^x\) ,我们不妨起初固定一种方案,如果不满足条件后再把一部分换回去。

  • 我们强制钦定起初都使用 \(2^{x+1}-2^x\) 的方法记录,记 \(cnt,add,del\) 分别表示 \(x\) 的次数(负数表示给出), \(x\) 最多可以再被多选几次, \(x\) 最多可以再被给出几次

  • 如果 \(cnt_i\) 为奇数的话一定无解,因为 \(2^x \Leftrightarrow 2^{x+1}-2^x\) 时次数的变化一定是 \(2\) 的倍数。如果 \(add,del\) 出现了不够的情况说明无解

  • 最终复杂度 \(O(n \log V)\)

const int maxn=2e5+50;

int n,a[maxn],b[maxn];
int cnt[maxn],add[maxn],del[maxn];

int lowbit(int x){return (x&-x);}
void mian(int TwT){
	read(n);For(i,1,n)read(a[i]);
	ll ave=0;For(i,1,n)ave+=a[i];if(ave%n){puts("NO");return;}ave/=n;
	For(i,1,n){
		if(a[i]==ave)continue;b[i]=abs(a[i]-ave);
		int x=lowbit(b[i]),y=b[i]+x;
		if(lowbit(y)!=y){puts("NO");return;}
		if(a[i]-ave>0)--cnt[__lg(x)],++cnt[__lg(y)];
		else ++cnt[__lg(x)],--cnt[__lg(y)];
		if(lowbit(b[i])==b[i]){
			if(a[i]-ave>0)++add[__lg(b[i])];
			else ++del[__lg(b[i])];
		}
	}
	For(i,0,31){
		if(cnt[i]&1){puts("NO");return;}
		if(cnt[i]<0){
			cnt[i]=-cnt[i];
			if(add[i]*2<cnt[i]){puts("NO");return;}
			cnt[i+1]-=cnt[i]>>1;
		}
		else{
			if(del[i]*2<cnt[i]){puts("NO");return;}
			cnt[i+1]+=cnt[i]>>1;
		}
	}
	puts("YES");
}

标签:__,lg,CF1868B2,int,题解,Hard,cnt,maxn,ave
From: https://www.cnblogs.com/fox-konata/p/17806161.html

相关文章

  • CF227A Where do I Turn? 题解
    题目大意:\(A\),\(B\)在一条直线上。\(B\),\(C\)在一条直线上你从\(A\)走到了\(B\)去\(C\),问现在应该是直走、左转、还是右转。思路:分类讨论:分别求\(A\)到\(B\),\(B\)到\(C\)是什么方向,然后可得\(A\)到\(C\)的方向。Code:#include<bits/stdc++.h>usingnamesp......
  • CF333B题解
    分析发现只能跳\(n-1\)次,所以每个点一定是畅通无阻地抵达终点,所以有障碍的行和列放不了,并且每一个行或列最多放一个。因为同时跳,思考会不会跳到一起,发现如果不在正中间可以将起点放到另一头就不会跳到一起,如果在正中间就一定会跳到一起,所以正中间的行和列加一起最多只能放......
  • CF333A题解
    分析被除数一定,除数越小,商越大,所以选择合法的最小\(3_{x}\)。枚举指数即可,复杂度\(\mathcal{O(\log_{3}w)}\),\(w\)为值域\(1e18\),可以通过本题。代码#include<iostream>#defineintlonglongusingnamespacestd;constexprintMAXN(1000007);intf[MAXN];int......
  • P9740 「KDOI-06-J」ION 比赛 题解
    题目思路:先计算总分数\(sum\),\(c_i=\frac{100}{a_i}\)为每道题的每个测试点分数。如果总分数达到\(Au\)线,直接输出AlreadyAu.。否则计算到达\(Au\)线还需多少分\(p\),遍历所有题,求出每道题的失分,如果失分大于等于\(p\),则输出\(\lceil\frac{p}{c_i}\rceil\),即至......
  • Educational Codeforces Round 134 (Div.2) D 题解
    题目链接D.MaximumAND题目大意给定两组序列\(a\)\(b\),长度为\(n\),现有一新序列\(c\),长度也为\(n\)。其中,\(c_i=a_i\oplusb_i\)。定义\(f(a,b)=c_1\&c_2\&……\&c_n\)。现在你可以随意编排\(b\)序列的顺序,求\(f(a,b)\)的最大值。思路以下位运算均是......
  • 【python】-bash: /usr/local/bin/pip: /usr/bin/python: bad interpreter: No such f
    安装单独的第三方库时没有问题pipinstallpandas但是一旦使用requirement.txt批量安装第三方库时就会出现-bash:/recorddata/rebuydata/hppy/soft/python3/bin/pip3:/usr/local/source/hppy/soft/python3/bin/python3.6:badinterpreter:没有那个文件或目录badinterpreter......
  • CF1868B1 Candy Party (Easy Version) 题解
    Problem-1868B1-CodeforcesCandyParty(EasyVersion)-洛谷喵喵题。首先每个数最终肯定变成\(\overlinea\),如果\(\overlinea\)不是整数显然无解。然后记\(b_i=a_i-\overlinea\)表示每个数的偏差量,那\(b_i\)要满足能写成\(2^x-2^y\)的形式然后只需要......
  • abc194f O(nk)题解
    前言洛谷唯一的题解似乎是\(O(nk^2)\)的,怎么卡过去的orz这里提供一种与AT官方题解时间复杂度相同的\(O(nk)\)做法。Solution题意很显然,就不解释了。一眼丁真,考虑数位dp。设\(dp_{i,j}\)表示做到第\(i\)位,不同的个数有\(j\)种的方案数。显然有转移方程:\(dp_{i......
  • [ARC159F] Good Division 题解
    [ARC159F]GoodDivision题解首先对于题目要求的划分方式转化一下,转化为划分的每一段都没有绝对众数,可以证明这与题目中的要求是完全等价的,证明如下:充分性:考虑构造一种操作方法,就是每次操作都消去一个出现次数最多的数,按照这样操作可以保证每次操作之后该区间仍然不会出现绝对......
  • 10.30 CF1685 题解
    10.30CF1685A.CircularLocalMiniMax题意给你\(n\)个整数$a_1,a_2,\ldots,a_n$。问有没有可能将它们排列在一个圆上,使每个数字严格地大于其相邻的两个数字或严格地小于其相邻的两个数字?题解直接排序然后按照\(1,4,2,5,3,6\)的规律放,check一下合不合法就行了。......