1400 C.Binary String Reconstruction Problem - 1400C - Codeforces
给出一种01串的变换方法及对一个串变换后的结果串,求出原串(可以有多种),多组询问。
变换方法如下:
原串为 w,变换后的串为 s,两串长度相等;给出一个整数 x;01串从下标 11 开始。
-
如果原串 wi−x 这一位存在且为 1,那么 si 为 1(形式化地说,如果 i>x 且 wi−x=1,那么 si=1)。
-
如果原串wi+x 这一位存在且为 1,那么 si 为 1(形式化地说,如果 i+x≤n 且 wi+x=1,那么 si=1)。
-
如果上述两种情况均不成立,那么si=0。
给出 s,求出一种可能的 w,若不存在任意一种 w,输出-1
。
思路
模拟题?
先从w逆向求s,在顺序求w,看看两次w是否一致。
w->s时,由于长度边界和i所处位置的关系,样例中可能无法逆推出合适的s
反正就是很离谱
1418C. Mortal Kombat Tower Problem - 1418C - Codeforces
给出 t 组数据,对于每一组数据:
给定一个长度为 n 的 01 数组,先后手轮流从数组开头取数,每次可以取走 1 或 2 个数。
先后手都需要最小化先手取到 1 的数量,输出这个最小值。
思路
dp题
先说特殊情况,n≤3时,直接输出a[1]
设:dp1[i]为朋友走到 i 号时使用的全部点数,dp2[i]为我走到 i 号时使用的点数
那么有
dp1[i]=min(dp2[i-1]+a[i] , dp2[i-2]+a[i-1]+a[i])
dp2[i]=min(dp1[i-1] , dp1[i-2])
合并一下,有
dp[i]=min(dp[i-2]+a[i-1] , dp[i-4]+a[i-3]+a[i-2])
初始状态需要dp[1~4]