QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#795291 | #9747. 字符串复制 | pengpeng_fudan | AC ✓ | 160ms | 207024kb | C++23 | 3.1kb | 2024-11-30 19:16:57 | 2024-11-30 19:16:58 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct SAM{
vector<vector<int>> ch;
vector<int> link,len;
vector<int> cnt;
int mo;//有几个字符
int tot;
int pre;
SAM(int a=0,int b=0){
mo=b,tot=1,pre=1;
ch.resize(2*a+2);
ch[1].resize(mo);
link.resize(2*a+2),len.resize(2*a+2),cnt.resize(2*a+2);
}
void insert(int c){
int nxt=++tot;
ch[tot].resize(mo);
cnt[nxt]=1;
len[nxt]=len[pre]+1;
int p=pre;
while(p&&!ch[p][c]){
ch[p][c]=nxt;
p=link[p];
}
if(p==0) link[nxt]=1;
else{
int q=ch[p][c];
if(len[q]==len[p]+1) link[nxt]=q;
else{
int ad=++tot;
ch[tot].resize(mo);
len[ad]=len[p]+1;
link[ad]=link[q];
link[q]=link[nxt]=ad;
while(p&&ch[p][c]==q){
ch[p][c]=ad;
p=link[p];
}
for(int i=0;i<mo;i++) ch[ad][i]=ch[q][i];
}
}
pre=nxt;
}
ll get(){
ll ans=0;
for(int i=1;i<=tot;i++){
ans+=len[i]-len[link[i]];
}
return ans;
}
};
struct KMP{//注意这里所有的nxt都是jump的位置,要返回第i位的匹配长度是nxt[i]+1
string s;
vector<int> nxt;
void intt(string _s){
s=_s;
int sz=s.size();
nxt.assign(sz,0);
nxt[0]=-1;
for(int i=1,j=-1;i<sz;i++){
while(j!=-1&&s[i]!=s[j+1]) j=nxt[j];
if(s[i]==s[j+1]) j++;
nxt[i]=j;
}
}
vector<int> query(string w){//返回w关于s的nxt函数
int sz=s.size(),wz=w.size();
vector<int> f(wz);
for(int i=0,j=-1;i<wz;i++){
while(j==sz-1||(j!=-1&&w[i]!=s[j+1])) j=nxt[j];
if(w[i]==s[j+1]) j++;
f[i]=j;
}
return f;
}
};
const ll M=998244353;
void solve(){
ll n,m;
cin>>n>>m;
string s;
cin>>s;
KMP kp;kp.intt(s);
int xh=0;
int len=n-(kp.nxt[n-1]+1);
if(len==n||n%len!=0) xh=n;
else xh=len;
// m=m*(n/xh);
// cerr<<m<<'\n';
SAM sm(n,26);
for(auto i:s){
sm.insert(i-'a');
}
// cerr<<"?";
ll ans=sm.get();
ll det=ans;
if(m==1){
cout<<ans%M<<'\n';
return ;
}
int c=0;
auto get=[&](ll x)->ll {
x=(x*n)%M;
// cerr<<x<<' '<<xh<<'\n';
return (1ll*x*xh)%M;
};
det+=get(1);
while((1ll<<c)<m) c++;
c--;
ans=(ans+get(m-(1ll<<c)))%M;
for(int i=c;i>=1;i--){
ans=(ans+get((1<<(i-1))))%M;
}
s=s+s;
SAM sg(2*n,26);
for(auto i:s){
sg.insert(i-'a');
}
ans-=det-sg.get();
cout<<(ans%M+M)%M<<'\n';
}
int main() {
ios::sync_with_stdio(0),cin.tie(0);
int _ = 1;
// cin>>_;
while(_--) solve();
}
这程序好像有点Bug,我给组数据试试?
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3568kb
input:
6 2 mantle
output:
57
result:
ok single line: '57'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3788kb
input:
12 1919810 ifamjlifamjl
output:
138226305
result:
ok single line: '138226305'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3632kb
input:
13 935330878 aabbbbababbaa
output:
348310505
result:
ok single line: '348310505'
Test #4:
score: 0
Accepted
time: 160ms
memory: 185364kb
input:
300000 1000000000 rqwcfnskpxmdplyemxtntenuvjcbtggljuravmoaipbujlseqtuakblnqzbirxowfaeykxwldpeovyuuvjvskbllmtdlsfswoklvdpuuujryuvzbabieklgkcbqdocbmmwsjlfiqxvwocsexuldtiaucurmiewfrggbnbfmxqtaabxnbzcjnavvuuvowvyazzmgtdwvjlmwxpxontrusqgipfvfsjtckxdrloofzmjxxhlexhqcjchgryycbybcnmbjsaffaeaitkalawjuporbnzo...
output:
478922465
result:
ok single line: '478922465'
Test #5:
score: 0
Accepted
time: 2ms
memory: 5232kb
input:
3000 546279171 ddcaddabbadcdbcbacaddcabcbdcadbdadabdbadbbbbbbbcbddddbbbcdddcabcabbacadcbddbcddaabcacbcdcbccccbddababbbcacacdcaddaadacbcabbcccdbbabbddcdccabccaabbbdbaacccddccbbdbadacdcaaabbddccdbacddddaacaacbadcdacdcaddcdbcbdcbccaabadabcdcdaddaadcdadbaabacddacbcbbdaacdaccdadcdcabaacabcbdcacdacbcccdad...
output:
375109583
result:
ok single line: '375109583'
Test #6:
score: 0
Accepted
time: 0ms
memory: 16560kb
input:
20000 713238600 ddaceddaaaaaebbaccedaaaacdedadceecbcedaeabcaaecbdaebebdbdebebdddbdbabadabdddaaacdbccbccecdeaebcdabcacdbedacadcccecaddcaeeecbbabcbbccebceacdeeadbbcdcceaebaecaccbbabbceedbcedbbbbbbdeaadaaeaaecabeddbdeeaaeabcbaedbedeabbdecbacaabdadbabbdacabdcdaecaaaabecbdddeabadaacbddceecbeebcadacdbcedd...
output:
793179337
result:
ok single line: '793179337'
Test #7:
score: 0
Accepted
time: 134ms
memory: 133244kb
input:
200000 432588167 gfeaccabbeccbfbcafcdfebabeebfgdccbgbcbddcfacccedebcagdccagafefdcbdgfcbadaeffcdaebbdadgfgdefdgbgaeeadfcebbeaaegbbcbfdeegdcfdgebddadaceaacggcgaecddfdcgbgeaffgbgfcacdddcbgaddecceaefcbddebgceeegbceceegcaaadgccdbcffebaaeddcdgbgagbbcfffaabafcagfaabfadcbadggbdcfebgbagggagdfbccdbeafgcbegfcf...
output:
68059895
result:
ok single line: '68059895'
Test #8:
score: 0
Accepted
time: 80ms
memory: 207024kb
input:
300000 4405849 bbbabbbbaabaabaabbbaabbaaaabaaabbabbbbabbbbbabbbbababaaabbaaababbbaaabbbabbbbbaababbaabaaabbabbaaaaaabbabaaabbbbaabaabbbaaabaaaababbabbbbabbbbaaaaaaabababaaabababaabababaaaabbababbbbaabbbaabbabaabaabaaabbababbaababbaaabaaabbbababbabaababbabbabbabaabbbbbababbabaabbbaabaabbaabaababababb...
output:
147294182
result:
ok single line: '147294182'
Test #9:
score: 0
Accepted
time: 136ms
memory: 185252kb
input:
300000 59262767 tvjfbbccnjyudccwhwkvmfqvuoxqqktkbiqqtwfdwgxcqiljnsbyelzztivlpuylpcpupeccakwmhfjtlayinlvzptznmyqgtgsfrbojfsdwpqlxyhcvhyvioaeccqqbtjbvynwprudzgbtyknbugnbhcbmwkmsfokfmbnyxmidzshdsxibmhetswuyumbiedddkibvilqlgunananvbsiukuwewuibczodpdarorttepvewabnxslnpreoitjikgfyurecxqulvbzyzqagprzybrwln...
output:
638033683
result:
ok single line: '638033683'
Test #10:
score: 0
Accepted
time: 135ms
memory: 186772kb
input:
298942 948827395 eahqgctdomejjtldhbimwmmevmapsbmtvsrvlhhftqqnmddwgsskutelqwedplacbrkesadimqlcdqsbpqdcfotdpfwjhcdsqolungoeiwnqfbrwutdcsacmicqqlgvusplnmsqcxrxhsrpuetsmcohpntbicqpxqokpndjbkraicfmthbbxfkmcvksbmxplbcalkcskixaswxrewthtmdjhrwjdbtpqvenicfklibxnfnuwpternjevhiixjvhgvscowwjwvjocpkhbnrqxcuxvjoh...
output:
861490076
result:
ok single line: '861490076'
Test #11:
score: 0
Accepted
time: 0ms
memory: 3628kb
input:
1 114514 a
output:
114514
result:
ok single line: '114514'
Test #12:
score: 0
Accepted
time: 0ms
memory: 3604kb
input:
1 1 a
output:
1
result:
ok single line: '1'
Test #13:
score: 0
Accepted
time: 65ms
memory: 68112kb
input:
300000 1 bceuzejmvekodaqwzluhbnyzmkedzgrzkovzvggdwzqhnjltgiezlmbzdsmhpsnvotnvwbfrstzwpmtjyewecgeevcoyeszmamvvgvwtswrpgtakoomlgmwitprmmjfeftqlrlqitcupxxugnzzihepbewitjiqinxplqehcbuyrevryzgpszslrxjcevrhrivzerjzbonqltluholuiubnpwncrkkiivtjflvkinretburctccdicprnbhrkkbgkzaidnskdizklipgnxxwuhesebzoohjcmqq...
output:
78188321
result:
ok single line: '78188321'
Test #14:
score: 0
Accepted
time: 45ms
memory: 167144kb
input:
300000 1919810 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
954252672
result:
ok single line: '954252672'
Test #15:
score: 0
Accepted
time: 1ms
memory: 3820kb
input:
357 689696534 hdxgpbhdbxpeeyxsvxpmxflhgkgozuahtceghdqaqfrmpjnfrkwbqaorsmobamhzvymsysomqtwdbiqsplggwgskbfbbueoxlcousjgvtorvdlzziqifwmmezjwoenvvsvgeyoufzyirjvqiogufsqlfkllcaqezrvspwdepwisbdneuxjrzoybxtjhntdiiggvcprxarftgsnveyrmrbxgkcznbvuwhfvuouaiqsgtxvzlqgjpweibmpsbnkhwwqqlbzkxnkiawuehqrokqvvsonhfvrd...
output:
726994398
result:
ok single line: '726994398'
Extra Test:
score: 0
Extra Test Passed