AGC043 A~C 解题报告
A
简要题意:
有一个\(N*M\)的棋盘,每次操作可以选择一个矩形反转。
求最少操作次数,使得能够从\((1,1)\)只经过白色格子而且只向下或向右到达\((N,M)\)。
题目解法:
我们考虑答案路径\(L\),发现如果\(L\)中有\(x\)段黑色的连续段,那么答案就是\(x\)了。
知道了这个,那么我们设\(dp[i][j]\)表示走到\((i,j)\)的最小段数,转移非常简单。
B
简要题意:
有一个长度为\(N\)的只包含\(1,2,3\)的序列。
一次变换之后,会变成长度减一的序列,其中,第\(i\)个元素\(a_1[i] = abs(a_0[i - 1] - a_0[i])\)。
求出这个序列进行\(N-1\)次变换之后是哪一个数字。
题目解法:
我们先模拟一次变换,发现序列中的值就之后\(0,1,2\)了。
那么就可以发现,答案一定是\(0,1,2\)中的一个。
之后我们考虑怎么才可能令答案是\(2\),容易发现,如果最后答案是\(2\),那么从第一次变换之后,就不会有\(1\)了。
简易证明: 如果要出现一个2,那么之前两个数就是\(0,2\),再之前就是\(0,0,2\)或\(0,2,2\),再往前考虑,可以用归纳证明。
那么我们分一次变换之后有没有\(1\)考虑就行了。
- 先考虑有\(1\)的,那么答案一定是\(0\)或\(1\),此时直接求每一个数对答案的贡献奇偶性(组合数)就好了。
- 如果没有\(1\),那就只有\(0,2\),将每一个数都除以二,就变成第一种情况了。
C
简要题意:
有三个\(N\)个点的简单无向图,边数分别是\(M_1,M_2,M_3\),定义\(G\)是这三个图的笛卡尔积。
其中,有\(N^3\)个点,用\((i,j,k)\)表示,有\((M_1+M_2+M_3)N^2\)条边,用\(<(i,j,k),(x,y,z)>\)表示。
我们令一个点\((i,j,k)\)的权值是\(10^{18(i+j+k)}=1000000000000000000^{(i,j,k)}\)。
求出图\(G\)的最大权独立集。
题目解法:
因为是\(10^{18}\)的幂,而\(10^{18} > N^3\),所以我们可以将\(10^{18}\)当成\(inf\)。
那么如果能选一个\(inf^i\),就算选了它之后,所有的\(inf^{j},j<i\)都不能选,也不会差。
那么我们就有一个\(O((N+M)^3)\)的做法了,从小到大枚举那\(N^3\)个点,如果能选,就选(注意,因为大小相同的点没有边,所以是对的)。
我们考虑一个点能不能选的判定:
如果与这个点相邻的所有比它大的点都没有被选,那么他才可以选。
反之,只要有一个与它相邻的且比它大的点被选了,那么他就不能选。
是不是很熟悉?回忆 普通\(DAG\)上的博弈,发现能选就对应了必败,必胜就不能选。
于是考虑使用博弈论解决这个问题。
我们将每一条边规定由小的点指向大的点,那么出度为\(0\)的点都是必败的,\(SG=0\)。
而且我们发现每一次转移都只改变一维,那么我们三维之间就是独立的了。
我们设\(sg_i(u)\)表示第\(i\)个图中,\(u\)结点的\(SG\)值。
那么\(Ans = \sum_{sg_1(x)\bigoplus sg_2(y)\bigoplus sg_3(z)=0} inf^{(x+y+z)}\)。
做到这一步,求\(SG\)值,直接用\(set\)就好了,之后的那个统计答案,如果你足够大佬,可以用两次\(FWT\)解决。
但是可以发现,一个点的\(SG\)的上限是\(O(\sqrt{M})\)的,于是,我们暴力枚举卷积就好了。
D
简要题意:
定义一种生成长度为\(3N\)的排列的方法:
初始时有一个空的排列\(P\),将\(1\sim 3N\)这\(3N\)个数分成\(N\)个长度为\(3\)队列,每次在所有的队首中选一个最小的添加到\(P\)的末尾,求能生成多少种排列。
题目解法:
因为我太菜了,只会\(O(N^3)\)的\(DP\),所以就不讲了。
推荐一个大佬的题解:别人家的博客