题解合集

题解合集

高考考得一般,估计要打 ACM,先复健一下。——ljz

以后不用打部分分了!哦耶!

\(6.16\)

「NOIP2021」报数

直接筛即可。

「NOIP2021」数列

套路 dp 题,时间大概是 \(O(n^4m)\),注意最后进位的剩余要处理一下。

「NOIP2021」方差

爆肝 2h,肝出来了,手生了不少。这题怎么一股 AT 味,草。

首先是差分交换,交换后就变成 \(\sum i(n-i)b_i^2+2\sum_{i,j} i(n-j)b_ib_j\),可见常数 \(i(n-j)\)\(i\)\(j\) 越接近越大,那么猜测中间 \(b_i\) 最小,是个单峰分布的,感性理解以下很真。接下来前后插入数,尝试算这玩意的贡献,但直接算不好算,算移动的贡献

chkmin(f[s][j+sb[i]],f[t][j]+sb[i]*sb[i]);
chkmin(f[s][j+(n-1-k+i)*b[i]],f[t][j]+(ll)(n-1-k+i)*b[i]*b[i]+2ll*b[i]*j);

核心代码就两行,记得要把 \(0\) 去掉,最开始的差分不能算,因为方差只取决于相对差。

明天还有一道大码题,草

\(6.19\)

这两天回老家都没写什么,寄

CF1677

A: 直接枚举即可。

B: 两维可以分开算,一维记到余数上,另一维滑动窗口

C: 发现偶数环比奇数环要优,那么把奇数环长度-1,前后配对即可。

D: 冒泡排序题。先发现 \(v_i=\max(v_{i+1}-1,0)\),那么对第 \(i\in [1,n-k]\) 个位置分类讨论:

若是 \(-1\),直接 \(\times i+k\)

若是 \(0\),直接 \(\times k+1\)

若是 \(\ge 1\),直接 \(\times 1\)

最后 \(k\) 个位置要验证是否全是 \(0\)\(-1\),然后答案乘上 \(k!\) 即可。

E: vp 的时候觉得矩形覆盖+矩形和不是很可做,后来发现其实矩形的面积并不大,因为启发式分裂,每次都找短的一边,有一维只有 \(n\log n\) 这个数量级。(可以用 RMQ 树理解,我太久没写了单调栈都不会,直接一个 st 表倍增 hhh)之后加个线段树扫描线一下即可。

\(6.30\)

CF1685C Bring Balance

\(ans\le 2\),然后找方案

CF1696F Tree Recovery

直接连边然后 check

CF1696C Keshi in Search of AmShZ

改造 dij

CF1696D Decinc Dividing

子序列 3 4 1 2 不能出现,好题!

CF1685D1 Permutation Weight (Easy Version)

神题,怎么想到连续交换的

CF1672F2 Checker for Array Shuffling

判圈。注意只用判断是否最大,因此没必要求最终答案。

CF1672H Zigu Zagu

把相邻的相同的抵消掉即可。

\(7.2\)

完全不会了,kuso

CF1667C Half Queen Cover

先找理论下界,然后对角线构造

CF1667D Edge Elimination

好神的树形 dp,转移只与儿子数量的奇偶和 dp 状态的不同种类。对根要特殊处理一下。

CF1667E Centroid Probabilities

排列组合,我用了 NTT,一打开题解发现都是线性做法,又被暴打了 T_T

\(7.9\)

最近在准备科目一和追美剧,没写题解一定是咕了。

CF1701E Text Editor

一道需要耗费一点脑子的思维题,挺适合复健。

首先 end 是不需要的,而且 home 只可能用一次。于是只有两种情况,一是直接从后面删到开头,而是从后面删到某一个位置,然后 home,从前往后删。前面删的方式与后面不同,删除的字符需要先 right 再 backspace,匹配的字符直接 right。那么答案只和两个字符串从 \(s_i,t_j\) 开始的最长匹配有关,这个东西可以 dp,然后再 dp 一下前缀和后缀的匹配,时间 \(O(n^2)\)

CF1701F Points

考虑把答案算在 \(i\) 上,那么 \([i+1,i+d]\)\(k\) 个数,答案就是 \(\frac {k^2-k}{2}\)。开一棵线段树维护个数和、答案和、二次方和即可。

\(7.10\)

CF1637F Towers

适合复健的题。首先可以贪心,每次选一条更多覆盖大的值的链,将最大值的点视为根,将最开始两个点选完后就是选叶子的过程,用一个堆维护一下最大值即可。注意根的儿子只有一个的时候要特判一下。

CF1637G Birthday

神题,第一步就没想到。我刚开始猜答案 \(n+1\),试了一下 \(4\) 不行,后来猜偶数无解,反正整了半天不会。

官方题解

我把题解翻译一下。

首先不可能会有奇因子。考虑逆操作 \(x,y\rightarrow \frac{x+y}{2},\frac{|x-y|}{2}\),操作完奇因子不变。

后面通过一些操作把所有的数变成 \(2^x\),然后再不断倍增上去。(写不动了T_T)

\(7.11\)

CF1684F Diverse Segments

想不到了.jpg

对每个颜色维护 \(pre_i,nxt_i,lim_i\),结果是 \(pre_i\ge lim_i\),开个双指针+set维护即可。

\(7.16\)

前几天口胡了一下 ARC142,ARC143,感觉很养生,题目很不错,就是我想不到。

ARC143C Piles of Pebbles

以前没做过这种双方不同的博弈论。。。

博弈论的核心是对抗,所以可以从特殊情况入手,然后再找到某个对抗对方的策略,将局面维持在特定性质下。

这道题的特定性质就是 \(\text{mod}\ X+Y\)

若所有刚开始所有堆都 \(<X\),那么先手必输。

对于某些 \(\ge X+Y\) 的堆,若先手将这些堆减去 \(X\),后手可以减去 \(Y\),使得模 \(X+Y\) 相同。

\(B_i=A_i\text{mod}\ (X+Y)\),那么若 \(B_i<X\) 都成立,那么先手输,否则先手可以对 \(B_i\ge X\) 的集合做一次操作,使得后手必败。

ARC143D Bridges

先排除显然的情况,再猜结论。

若原图就有桥,那一定不符合。这些边可以排除。

对于剩下的连通块,可以做一颗搜索树,树边往下连边,非树边向上连边。因为这些连通块没有桥,这样每个边都在一个环中。这样构造其他的边都不是桥,一定最多。

ARC143E Reversi

感觉和我高一联赛那道不可做有点像。。。

删除的问题,考虑删除序。从特殊情况想起,叶子是白色,就把叶子往父亲连一条边,反之亦然。然后在 DAG 中跑最小拓扑序即可。

ARC142C Tree Queries

一道我想吐槽的交互题,最难的居然是特殊情况。

首先,若 \(d_{1,2}\) 中间有点,那么花 \(2(N-2)\) 次操作分别问所有点到 \(1,2\) 和距离,然后加起来取个 min 即可。

\(d_{1,2}\) 没点,那么就要讨论多种情况。具体看代码好了。

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
int n,cnt1,cnt2;
int main()
{
	scanf("%d",&n);
	int u,v,x,y,ans=0x3f3f3f3f;
	for(int i=3;i<=n;i++)
	{
		printf("? 1 %d\n",i);
		fflush(stdout);
		scanf("%d",&x);
		printf("? 2 %d\n",i);
		fflush(stdout);
		scanf("%d",&y);
		ans=min(ans,x+y);
		if(x==1 && y==2) u=i,cnt1++;
		if(x==2 && y==1) v=i,cnt2++;
	}
	if(ans==3)
	{
		if(cnt1==1 && cnt2==1)
		{
			printf("? %d %d\n",u,v);
			fflush(stdout);
			scanf("%d",&x);
			if(x==1) printf("! 3\n");
			else printf("! 1\n");
		}
		else printf("! 1\n");
	}
	else printf("! %d\n",ans);
	fflush(stdout);
	return 0;
}

ARC142D Deterministic Placing

树形 dp 神题。

题解

ARC142E Pairing Wizards

我觉得这个网络流比 D 简单。。。

题解

NOI2005 聪聪与可可

式子很好推,就是我刚开始当做高斯消元题了。原因是对消元题不理解,有环才需要消元,这题聪聪和可可在一轮后两者的最短距离至少 \(-1\),因此不会有环。接下来记搜即可。

CERC2017 Gambling Guide

式子 \(f_x=\sum min(f_x,f_y)/d_x+1\),然后对着优化成 \(f_x=(\sum f_y+d_x)/cnt_x(f_y<f_x)\),正好可以用最短路松弛。(证明很巧妙)

\(08.18\)

尝试重新更新.jpg

CF1704E E Count Seconds

先模拟 n 轮(太妙了),再拓扑排序。

CF1704F Colouring Game

手玩一下,一定是先消除红蓝交错的部分,再一个一个消,总之让自己颜色个数-对方颜色数最大即可。那么统计一下个数,若相同,则转化成 Nim 博弈。当然我没用 oeis,也没想到有个 34 的周期

posted @ 2022-06-16 20:07  Owen_codeisking  阅读(321)  评论(2编辑  收藏  举报