样例过不去
查看原帖
样例过不去
1034295
QuaternaryTree楼主2024/5/23 13:14
#include <iostream>
#include <map>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cmath>
using namespace std;

#define B __int128
#define mod 998244353
map<B,int>mp[111];

int dfs(int l,B S){
	if(!l) return 1;
	if(mp[l].count(S)) return mp[l][S];
	int sum = dfs(l - 1,S / 2) * (S % 2 + 1) % mod;
	B x = 0,y;
	for(int i = 1;i <= l;i++){
		x = x << 1 | 1;y = S & x;
		for(int j = i + 1;j <= l;j += i){
			sum = (sum + 111 * dfs(i,y &= S >> j - i) * dfs(l - j,S >> j)) % mod;
		}
	}
	return mp[l][S] = sum;
}
char s[111];int l;
signed main(){
	cin>>s;l = strlen(s);
	B S = 0;for(int i = l;i--;) S = S << 1 | (s[i] == 'l');
	cout<<dfs(l,S);
	return 0;
}
2024/5/23 13:14
加载中...