ABC 记录+题解合集

开坑开坑!

你说的对,但其实是因为得上分打 ARC 来着。

ABC420

A

\((X+Y-1) \bmod 12 +1\)

B

依题意统计。
因为不需要真的输出得分,所以全体投票相同的情形并不需要特判。

for(int i=1;i<=n;++i) num[id[i][t]]++;
for(int i=1;i<=n;++i){
	if(num[id[i][t]]*2<n){
		pts[i]++;
	}
}

这样码量小不少。

C

典中典之每次只会改变一个对答案有贡献的值。
做之前先减掉,做完再加回来即可。

D

被翻译小坑了一手,以为到终点时也要为初始状态来着。
\((x,y,0/1)\) BFS 一遍即可。

E

并查集维护连通块中黑点个数即可。

F

感觉是比较不简单的一道题捏。
考虑对每一行扫描线地看。
\(dep\) 表示一个点向上最多能走几个.,建出小根笛卡尔树。
则跨过当前节点的区间的高最多为 \(dep_u\).
\(l,r(l\le r)\) 分别为分治中两个子区间的长度。
发现区间的出现次数是:\(1,2,...,l,l+1,l+1,...,l+1,l,l-1,..,1\).
而长度 \(\le k/dep_u\) 的有 \(dep[u]\) 个,大于的有 \(k/len\) 个,分讨一下即可。

for(int i=1;i<=m;++i){
	sum1[i]=sum1[i-1]+(k/i)*i;
	sum2[i]=sum2[i-1]+(k/i);
}
long long calc(int l,int r){
    return 1ll*(r-l+1)*(l+r)/2;
}

if(dep[rt]!=0){
	int lim1=min(rt-l+1,r-rt+1),lim2=max(rt-l+1,r-rt+1),lim3=min(r-l+1,k/dep[rt]),lim4=r-l+1;
	if(lim3<=lim1){
		ans+=calc(1,lim3)*dep[rt];
		ans+=sum1[lim1]-sum1[lim3];
		ans+=(sum2[lim2]-sum2[lim1])*lim1;
		ans+=(lim4+1)*(sum2[lim4]-sum2[lim2])-(sum1[lim4]-sum1[lim2]);
	}else if(lim3<=lim2){
		ans+=calc(1,lim1)*dep[rt];
		ans+=1ll*(lim3-lim1)*(lim1)*dep[rt];
		ans+=(sum2[lim2]-sum2[lim3])*lim1;
		ans+=(lim4+1)*(sum2[lim4]-sum2[lim2])-(sum1[lim4]-sum1[lim2]);
	}else{
		ans+=calc(1,lim1)*dep[rt];
		ans+=1ll*(lim2-lim1)*(lim1)*dep[rt];
		ans+=calc(lim1-(lim3-lim2),lim1-1)*dep[rt];
		ans+=(lim4+1)*(sum2[lim4]-sum2[lim3])-(sum1[lim4]-sum1[lim3]);
	}
}

你说的对,但是我的翻译怎么给我翻出来恰好由 \(K\) 个单元格组成来着。

G

有点送捏。
记根号开出来是 \(t(t\ge0)\),化简一下发现 \(1-4X=(2n-2t+1)(2n+2t+1)\)
找出所有因子,匹配相加即可得到 \(2n+1\) 的值。
懒得分析了,意识到因子个数只有 \(O(X^{\frac{1}{3}})\),所以可以直接排一手序,就没了。

posted @ 2025-08-27 10:33  SGaZn  阅读(12)  评论(0)    收藏  举报