LINK:Kaavi and Magic Spell 一打CF才知道自己原来这么菜 这题完全没想到. 可以发现 如果dp f[i][j]表示前i个字符匹配T的前j个字符的方案数 此时转移变得异常麻烦 状态转移一次变成了O(n). 会超时 而且这个状态的转移也是不正确的 可能当前的S字符串后面放了一些不能匹配的东西 但是此时却体现不出来. 那我们如何描述每次增加一个字符且和T匹配多少这种状态呢. 一个思路 先对于S串的某个i暴力枚举 其对应在T中的位置 这样的话dp就变成了 f[i][j][k]表…
CF1336C Kaavi and Magic Spell 区间dp 题意 给一个长度为 \(n\) 的字符串 \(S\) 和一个长度为 \(m\) 的字符串\(T\) ,\(1\le m\le n\),然后开始有一个空串 \(A\),接下来可对 \(S\) 串进行 $n4 次操作: 把S的首个字符添加到A的开头然后删掉 把S的首个字符添加到A的尾端然后删掉 问在操作过程中使得 \(A\) 的前 \(m\) 个字符为 \(T\)(也就是前缀为 \(T\))的情况共有多少? 长度不同或者是操作序列…
LINK:Xenia and Colorful Gems 考试的时候没想到一个很好的做法. 赛后也有一个想法. 可以考虑答案的样子 x,y,z 可以发现 一共有 x<=y<=z,z<=y<=z,y<=x<=z... 6种情况 考虑 y<=x<=z 观察这个形式 枚举x 发现y在<=x中显然取较大的那个更优 证明的话 x不变 在z不变的情况 y在符合条件的情况下自然 越小越不优 再讨论z越大的问题 再讨论y z一个变小一个变大的情况 综上可以发现 y z…
◇第4站&赛时9◇ CF Round 513 Div1+Div2 第一次在CF里涨Rating QWQ 深感不易……作blog以记之 ( ̄▽ ̄)" +Codeforces 的门为你打开+ ▶ 简单总结 莫名其妙打Atcoder比打CF要打得好些……以前CF打一场就掉一场分,直接爆炸,对CF都要绝望了. 终于这场比赛涨回来了(.^▽^) 看来比赛都向着思维难度进发了,代码实现已经不是考点了,以前背几个版就可以AK虐全场的时代也过去了,OI的路还很长,还得慢慢走…… (●'◡'●) ▶ 题目…
CF 983B XOR-pyramid(区间dp,异或) 若有一个长度为m的数组b,定义函数f为: \(f(b) = \begin{cases} b[1] & \quad \text{if } m = 1, \\ f(b[1] \oplus b[2],b[2] \oplus b[3],\dots,b[m-1] \oplus b[m]) & \quad \text{otherwise} \end{cases}\) 现在给出长度为n(n<=5000)的数组a,询问q(q<=1000…
给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内有多少种上色方案,很明显的区间DP dp[l][r][i][j]表示l-r区间两端颜色分别是i,j的方案数 0代表不上色,1代表上红色,2代表上蓝色 对于l-r区间,有3种情况 1.if(l+1==r) 说明就只有一对,那么dp[l][r][0][1]=1;         dp[l][r][1][…
C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output ->  Link  <- 题目就不贴出来了,链接在上面: 题意:给定n,k,然后是一个长度为n的只含字母a.b的字符串,问至多改变k次使得一个子串字母都相同且长度最大,如所给样例: input 10 1 bbabbabbba output…
1.http://codeforces.com/problemset/problem/149/D 2.题目大意 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内有多少种上色方案,很明显的区间DP dp[l][r][i][j]表示l-r区间两端颜色分别是i,j的方案数 0代表不上色,1代表上红色,2代表上蓝色 对于l-r区间,有3种情况 1.if(…
problem1 link 首先枚举长度$L$.然后计算每一段长度$L$的差值最大公约数,然后差值除以最大公约数的结果可以作为当前段的关键字.然后不同段就可以比较他们的关键字,一样就是可以转化的. problem2 link 对于那些一定要换的,把它们的places和cutoff拿出来,排个序.设它们为$p_{1},p_{2},..,p_{k},c_{1},c_{2},..,c_{k},$.最优的策略一定是从小到大挨个匹配. 如果到了某个位置不能匹配,比如$t$.那么需要从那些不需要交换的组里面…
B. Wrong Answer 构造一个长度为 2000 的数组,满足最大“子段和 $\times$ 子段长度”比最大子段和刚好大 k sol: 一个比较好的构造方法: 令数组总和为 $S$,然后构造 $a_1,a_2,...,a_{1998}=0,a_{1999}=-d,a_{2000}=S+d$ 这样正确答案是 $2000 \times S$,最大子段和是 $S+d$ 发现 $S = \frac{k+d}{1999}$ 于是令 $d=1999-(k \space mod \space 199…