C - Iroha’s Obsession
300 300 300分 模拟
直接暴力加就行
D - Iroha and a Grid
400 400 400分 组合数学
考虑容斥,矩阵 ( n , m ) (n,m) (n,m)考虑从坐上走到右下的所有方式为 C ( n + m − 2 , n − 1 ) C(n+m-2,n-1) C(n+m−2,n−1),现在我们只需要减去路线中经过左下角的方案即可,所以我们只需要枚举左下角的第一行,假设当前枚举到 ( x , y ) (x,y) (x,y),计算从 ( 1 , 1 ) (1,1) (1,1)到 ( x , y ) (x,y) (x,y)的方案,让后算一下 ( x , y ) (x,y) (x,y)到 ( n , m ) (n,m) (n,m)方案,两个方案乘起来即可,注意算 ( 1 , 1 ) (1,1) (1,1)到 ( x , y ) (x,y) (x,y)方案的时候需要减去一个前缀。
E - Iroha and Haiku
700 700 700分 状压dp
700 700 700分做起来也费劲,还是自己擅长的状压dp,属实是菜。
题意有点复杂,稍微解释一下
你有一个长度为 n n n的数组,每个位置元素的值是 [ 1 , 10 ] [1,10] [1,10]之间任意数,给你 X , Y , Z X,Y,Z X,Y,Z,让后现在让你求有多少个数组不存在四个整数 x , y , z , w x,y,z,w x,y,z,w,满足:
- a x + a x + 1 + . . . + a y − 1 = X a_x+a_{x+1}+...+a_{y-1}=X ax+ax+1+...+ay−1=X
- a y + a y + 1 + . . . + a z − 1 = Y a_y+a_{y+1}+...+a_{z-1}=Y ay+ay+1+...+az−1=Y
- a z + a z + 1 + . . . + a w − 1 = Z a_z+a_{z+1}+...+a_{w-1}=Z az+az+1+...+aw−1=Z
对答案模上 1 e 9 + 7 1e9+7 1e9+7。
3 ≤ n ≤ 40 , 1 ≤ X ≤ 5 , 1 ≤ Y ≤ 7 , 1 ≤ Z ≤ 5 3\le n\le 40,1\le X\le 5,1\le Y\le 7,1\le Z\le 5 3≤n≤40,1≤X≤5,1≤Y≤7,1≤Z≤5
依旧考虑用总方案减去不合法的,总方案显然是 1 0 n 10^{n} 10n,现在我们求不合法的。
考虑到 X , Y , Z X,Y,Z X,Y,Z都很小,我们可以使用状压,维护一个后缀,如果存在一个后缀和等于 x x x,那么我们将二进制的 1 < < ( x − 1 ) 1<<(x-1) 1<<(x−1)置为 1 1 1,由于 m a x ( X + Y + Z ) = 17 max(X+Y+Z)=17 max(X+Y+Z)=17,所以后缀的二进制最长也就 17 17 17位,每次只需要检查以下二进制是否 ( 1 < < ( Z − 1 ) ) , ( 1 < < ( Z + Y − 1 ) ) , ( 1 < < ( X + Y + z − 1 ) ) (1<<(Z-1)),(1<<(Z+Y-1)),(1<<(X+Y+z-1)) (1<<(Z−1)),(1<<(Z+Y−1)),(1<<(X+Y+z−1))这几位是否都为 1 1 1即可,可以用二进制操作方便得到。
考虑怎么给二进制都加上一个数 x x x,显然将所有数左移 x x x即可, b i t s e t bitset bitset经典操作了。
具体实现就写个 f [ i ] [ j ] f[i][j] f[i][j]代表到了第 i i i个位置,不算 i i i的时候后缀为 j j j的方案数,复杂度 O ( n ∗ ( 1 < < 17 ) ∗ 10 ) O(n*(1<<17)*10) O(n∗(1<<17)∗10)。
F - Iroha Loves Strings
1500 1500 1500分 背包 + 扩展 k m p kmp kmp // bitset优化乱搞dp
确实大大超出了我能力范围了,看了半天洛谷题解算是懂了点皮毛,但是不想写,咕咕咕。