tg 44

因为发言有歧义,所以被\(lyin\space D\)
但是发言感觉非常好所以就粘过来了
image
image

讲题

F

实际上如果所有的都相同的话直接钦定\(a_1\)异或出的所有值就好了
枚举\(a_1\space xor\space b_i,i\in [1,n],\)记为\(x\)
把所有的\(b_i\)开个桶
然后如果一个\(x\space xor\space a_i\)不存在或者对应桶的出现次数为\(0\)显然就是不合法的
否则桶对应的出现次数\(-1\)表示用了一个去匹配

S

一个比较好的\(DP\)
状态定义比较明显,转移和优化也是简单小套路
就是指数级拿\(70\)很无语
首先讨论无解情况,就是某种颜色直接超过串长一半就无解了
剩下的会有一个性质:每个颜色出现次数不超过串长一半
不知道这个甚至会直接干爆静态内存
显然每个颜色在移动时尽可能不会和同颜色交换,于是
定义\(f_{i,j,k}\)为处理串长\(i\),用掉红色\(i,\)绿色\(j,\)显然用黄色\(i-j-k\)
然后如果你要用某种颜色换的话,你需要换的次数就是下一个球出现的位置去减一下当前串长
(如果选择的球位于处理完的序列,上一个绝对值,含义到时候解释)
据此可以写出状态转移方程

if(j+1<=g[0][0])f[j+1][k][i-j-k][0]=min(f[j+1][k][i-j-k][0],min(f[j][k][i-j-k][1],f[j][k][i-j-k][2])+abs(i+1-g[0][j+1]));
if(k+1<=g[1][0])f[j][k+1][i-j-k][1]=min(f[j][k+1][i-j-k][1],min(f[j][k][i-j-k][0],f[j][k][i-j-k][2])+abs(i+1-g[1][k+1]));
if(i-j-k+1<=g[2][0])f[j][k][i-j-k+1][2]=min(f[j][k][i-j-k+1][2],min(f[j][k][i-j-k][1],f[j][k][i-j-k][0])+abs(i+1-g[2][i-j-k+1]));

实际上这时你算的答案有从后往前挪的,还有从前往后挪的都算上了
实际上只算一遍所以还要除\(2\)

Y

计数\(DP\)
image

T4

暴力\(30\)

posted @ 2022-09-16 12:11  2K22  阅读(1)  评论(0)    收藏  举报