做的时候网上似乎一篇题解都没有,写一下造福社会。
省流:都是傻逼题。
Cukiernia
一眼会想到三种里必然会移动两种所以每个点移动次数就是
min
(
a
+
b
,
b
+
c
,
a
+
c
)
\min(a+b,b+c,a+c)
min(a+b,b+c,a+c),但是三种东西货架至少得有一个,所以 dp 一下,设 dp[i][0/1][0/1][0/1]
表示有没有三种货架。非常简单。
Gang Biciaków
好像直接莫队就行了,意义不明,这题我也没写,不知道是不是存在什么高论
Gra platformowa
暴力是直接考虑每个点坐标建图 01BFS,
显然直接吧每个连续段当作点建图就行了。
Licznik długu
初见很神秘,实际很傻逼。
一眼想到分块,维护每个块前面一个块向不向自己进位时自己的结果,修改暴力重构整个块的结果,查询整块只关心向不向下一个块进位,最后那个散块暴力。
另:本校 OJ 上除本人外通过此题的三份代码分别是:压位 trie,ddp,二分树状数组,感觉很神秘。
Tablica binarna
稍微有点意思的题,但是也不难。我这种没有脑子的傻逼也做的来。
首先考虑给你一个矩阵算答案,每个点显然最多当成右端点一次,那么设 s i , j s_{i,j} si,j 表示这个点是否要进行操作, s i , j = 1 s_{i,j}=1 si,j=1 当且仅当其右下方所有 s i , j s_{i,j} si,j 异或和不等于 a i , j a_{i,j} ai,j。写成代码大概就是:
s[i][j]=s[i+1][j+1]^s[i+1][j]^s[i][j+1]^a[i][j];
ans+=s[i][j];
s[i][j]=s[i+1][j+1]^s[i+1][j]^s[i][j+1]^s[i][j];
然后把上面那个带入下面那个,发现 s i , j s_{i,j} si,j 的二维后缀和就是 a i , j a_{i,j} ai,j。
因此上述代码等价于:
s[i][j]=a[i+1][j+1]^a[i+1][j]^a[i][j+1]^a[i][j];
ans+=s[i][j];
我们发现,这四个值有偶数个翻转的时候答案不变,而有奇数个翻转的位置每次操作只有 4 4 4 个,暴力即可。