Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
24184 | yuanjiabao | 【BJ】T2 | C++ | 通过 | 100 | 455 MS | 2696 KB | 991 | 2023-12-12 22:44:09 |
#include<iostream> #include<cstring> #include<map> using namespace std; #define int long long const int N=100100; int n; char s[N]; int f[N][3]; inline int id(char c){return c-'a';} void init(){ cin>>n; memset(s,0,(n+3)*sizeof(char)); scanf("%s",s+1); for(int c=0;c<3;c++){ int p=n+1; for(int i=n;i>=0;i--){ f[i][c]=p; if(id(s[i])==c)p=i; } } } int ans; int t[N]; void update(int len){ int nd=0,cnt=0,p=0; while(nd<=n){ nd=f[nd][t[++p]]; p%=len; if(!p&&nd<=n)cnt++; } ans=max(ans,cnt*cnt*len); } int cnt[10]; void dfs(int dep){ if(dep>8)return; for(int i=0;i<3;i++){ t[dep]=i; cnt[i]++; if(cnt[i]<3) update(dep), dfs(dep+1); t[dep]=0; cnt[i]--; } } signed main(){ // freopen("string.in","r",stdin); // freopen("string.out","w",stdout); int T;cin>>T; while(T--){ init(); ans=0; dfs(1); printf("%lld\n",ans); } return 0; }