题意是这样的,给你一个串,只有 T 和 W。令 T=2,W=1,将其变成数字串。然后每次给一个k,问是否存在一个子段和为k
一筐题目:
https://www.acwing.com/problem/content/description/4040/ 基础版本,只需要存在性并输出任意一组合法解
https://www.luogu.com.cn/problem/P3514 英文版基础版本,只需要存在性并输出任意一组合法解
https://codeforces.com/contest/1896/problem/D 带修改版本但不用输出具体是哪段
https://www.luogu.com.cn/problem/P6859 带修改版本并且需要输出左端点最小的解
https://qoj.ac/contest/1404/problem/7684?v=1 2023ccpc桂林H也用到这个思想
核心结论是如果能表示出x,那么一定可以表示出x-2.
这是因为如果子段有一个端点为2,删掉就可以得到。要不两个端点就都是1,两端都删掉可以得到.
所以其实我们只需要最大的子段奇数和与偶数和就可以判断是否有解了.
如果是奇数,只要比最大奇数和小,通过不断减2操作一定可以得到。偶数的情况同理可得。