社区讨论

求卡常

P15245[WC2026] 二进制参与者 5已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mlkygsrb
此快照首次捕获于
2026/02/13 22:00
6 天前
此快照最后确认于
2026/02/14 15:04
5 天前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define lli long long
#define db long double
#define ull unsigned long long
#define F(i,k,n) for (int i=k;i<=n;i++)
#define R(i,k,n) for (int i=k;i>=n;i--)
#define pu push_back
#define mpr make_pair
#define ins insert
#define lowb(x) (x&(-x))
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)
#define mes(a,b) memset(a,b,sizeof a)
const int N=2e5+10;
const int inf=1e18;
void init(signed c,signed t){
	
}
inline int solve(int x,int y){
	if (x<y) swap(x,y);
	int lenx=(int)log2(x)+1;
	int leny=(int)log2(y)+1;
	int mod=1ll<<(lenx-leny);
	int ans=inf;
	int up=x%mod;
	F(i,1,lenx-leny){
		int m=up-((up>>i)<<i);
        int op=(1ll<<(i))-m+1+lenx-leny+__builtin_popcountll((up/(1ll<<i))*(1ll<<i));
		ans=min(ans,op);
        if (op>130) break;
	}
	ans=min(ans,lenx-leny+__builtin_popcountll(up));
	return ans;
}
long long binary(long long x, long long y){
	if (x<y) swap(x,y);
	int lenx=(int)log2(x)+1;
	int leny=(int)log2(y)+1;
	int m=(x>>(lenx-leny));
	if (m>y) return min(solve(y*(1ll<<(lenx-leny+1)),y)+y*(1ll<<(lenx-leny+1))-x,solve(x,m)+m-y);
    else if (m==y) return solve(x,m);
	else return min(solve(y*(1ll<<(lenx-leny)),y)+y*(1ll<<(lenx-leny))-x
	,solve(m*2+((x>>(lenx-leny-1))&1),x)+m*2+((x>>(lenx-leny-1))&1)-y);
}
O(qlogVloglogV)O(q \log V \log \log V) 只有 84pts。

回复

6 条回复,欢迎继续交流。

正在加载回复...