#693. LG2024TG-20
LG2024TG-20
- (完善程序)
(最长公共前缀)定义 LCP(s,t)为两个字符串的最长公共前缀。例如:s=abcde,t=abcabc,则 LCP(s,t)=abc。定义|s|为字符串 s 的长度,在上一例中|s|=5。
现在给定了 n 个字符串 。现在需要统计所有同时满足如下两个条件的 |LCP()| 之和对 998244353 取模的值:条件 1:i < j。条件 2: < 。
若 ,字符串仅由小写字母构成,试补全程序。
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+9,mod=998244353;
char s[maxn][22];
int n;
int tmp[27][maxn],a[maxn];
int dfs(int l,int r,int p){
if(l>=r||p>=20) return 0;
int tail[27],ans=0;
memset(tail,0,sizeof(tail));
for(int i=l;i<=r;++i){
int ch=_________________________;
_________________________;
for(int j=0;j<ch;++j)
_________________________;
}
int tot=l,pos=l;
for(int i=0;i<27;++i)
for(int j=0;j<tail[i];++j)
a[tot++]=tmp[i][j];
for(int i=0;i<27;++i){
_________________________;
pos+=tail[i];
}
return ans;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%s",s[i]);
for(int i=1;i<=n;++i) a[i]=i;
printf("%d\n",_________________________);
return 0;
}
① 处应填( )。
{{ select(1) }}
- s[i][p] ? s[i][p] - 'a': 0
- s[i][p] ? s[i][p] - 'a' + 1 : 0
- s[a[i]][p] ? s[a[i]][p] - 'a': 0
- s[a[i]][p] ? s[a[i]][p] - 'a' + 1 : 0
② 处应填( )。
{{ select(2) }}
- tmp[ch][tail[ch]++] = a[i]
- tmp[ch][++tail[ch]] = a[i]
- tmp[ch][tail[ch]++] = i
- tmp[ch][++tail[ch]] = i
③ 处应填( )。
{{ select(3) }}
- ans = (ans + 1ll * (p - 1) * tail[j] % mod) % mod
- ans = (ans + 1ll * p * tail[j] % mod) % mod
- ans = (ans + 1ll * (p + 1) * tail[j] % mod) % mod
- ans = (ans + 1ll * (p + 2) * tail[j] % mod) % mod
④ 处应填( )。
{{ select(4) }}
- ans = (ans + dfs(pos + 1, pos + tail[i], p + 1)) % mod
- ans = (ans + dfs(pos + 1, pos + tail[i], p - 1)) % mod
- ans = (ans + dfs(pos, pos + tail[i] - 1, p + 1)) % mod
- ans = (ans + dfs(pos, pos + tail[i] - 1, p - 1)) % mod
⑤ 处应填( )。
{{ select(5) }}
- dfs(0, n - 1, 0)
- dfs(1, n, 0)
- dfs(1, n, 1)
- dfs(1, n - 1, 1)