杂题小记(2023.03.02-03)更好的阅读体验戳此进入[AGC020E] Encoding Subsets题面SolutionCode题面SolutionCode题面SolutionCode题面SolutionCode题面SolutionCode题面SolutionCodeUPD
我们定义一个 01
串的压缩是满足如下方式的字符串变化过程:
如果
如果 (
, )
, ×
为字符,
我们同时定义
现在给你一个
答案对
小清新记忆化搜索维护 DP,考虑令
xxxxxxxxxx
711
2
3
4
5
6
7
8
9
10
11
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
23
24
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}
xxxxxxxxxx
11
xxxxxxxxxx
11
xxxxxxxxxx
11
xxxxxxxxxx
11
xxxxxxxxxx
11
update-2023__ 初稿