杂题小记(2023.03.02-03)更好的阅读体验戳此进入[AGC020E] Encoding Subsets题面SolutionCode题面SolutionCode题面SolutionCode题面SolutionCode题面SolutionCode题面SolutionCodeUPD
我们定义一个 01 串的压缩是满足如下方式的字符串变化过程:
如果
如果 (, ), × 为字符,
我们同时定义
现在给你一个
答案对
小清新记忆化搜索维护 DP,考虑令
xxxxxxxxxx71123
4567891011
12using namespace std;13
14mt19937 rnd(random_device{}());15int rndd(int l, int r){return rnd() % (r - l + 1) + l;}16bool rnddd(int x){return rndd(1, 100) <= x;}17
18typedef unsigned int uint;19typedef unsigned long long unll;20typedef long long ll;21typedef long double ld;22
2324
25template < typename T = int >26inline T read(void);27
28string S;29map < pair < __int128_t, int >, ll > mp;30
31ll dfs(__int128_t S, int len){32 if(!len)return 1;33 if(mp.find({S, len}) != mp.end())return mp[{S, len}];34 ll ret(0);35 (ret += dfs(S >> 1, len - 1) * (S & 1 ? 2 : 1) % MOD) %= MOD;36 __int128_t siz(0), cur(0);37 for(int slen = 1; slen <= len; ++slen){38 (siz <<= 1) |= 1, cur = S & siz;39 for(int rlen = slen << 1; rlen <= len; rlen += slen){40 cur &= S >> (rlen - slen);41 (ret += dfs(cur, slen) * dfs(S >> rlen, len - rlen) % MOD) %= MOD;42 }43 }return mp[{S, len}] = ret;44}45
46int main(){47 cin >> S;48 int N = S.length();49 __int128_t cur(0);50 for(int i = 0; i < N; ++i)51 cur |= (__int128_t)(S.at(i) == '1') << i;52 printf("%lld\n", dfs(cur, N));53 fprintf(stderr, "Time: %.6lf\n", (double)clock() / CLOCKS_PER_SEC);54 return 0;55}56
57template < typename T >58inline T read(void){59 T ret(0);60 int flag(1);61 char c = getchar();62 while(c != '-' && !isdigit(c))c = getchar();63 if(c == '-')flag = -1, c = getchar();64 while(isdigit(c)){65 ret *= 10;66 ret += int(c - '0');67 c = getchar();68 }69 ret *= flag;70 return ret;71}
xxxxxxxxxx11
xxxxxxxxxx11
xxxxxxxxxx11
xxxxxxxxxx11
xxxxxxxxxx11
update-2023__ 初稿