QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#786727 | #8954. 一般路过串串题 | zlxFTH | 100 ✓ | 606ms | 237824kb | C++17 | 3.4kb | 2024-11-26 23:07:09 | 2024-11-26 23:07:10 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
constexpr int P = 1e9 + 7;
struct Mint {
int v;
Mint(int v = 0) : v(v) {v += v >> 31 & P;}
int val() const {return v;}
Mint &operator+=(const Mint &b) {
v += b.v - P, v += v >> 31 & P;
return *this;
}
Mint &operator-=(const Mint &b) {
v -= b.v, v += v >> 31 & P;
return *this;
}
Mint &operator*=(const Mint &b) {
v = LL(v) * b.v % P;
return *this;
}
friend Mint operator+(Mint a, const Mint &b) {return a += b;}
friend Mint operator-(Mint a, const Mint &b) {return a -= b;}
friend Mint operator*(Mint a, const Mint &b) {return a *= b;}
friend ostream &operator<<(ostream &os, const Mint &a) {
return os << a.val();
}
};
constexpr int N = 1e6 + 5;
int cnt = 1, fa[N], len[N], ed[N];
array<int, 26> ch[N];
vector<int> G[N];
Mint sum[N];
int ins(int p, int c) {
int cur = ++cnt; len[cur] = len[p] + 1;
ed[cur] = 1;
for (; p && !ch[p][c]; p = fa[p]) ch[p][c] = cur;
if (!p) fa[cur] = 1;
else {
int q = ch[p][c];
if (len[q] == len[p] + 1) fa[cur] = q;
else {
int cl = ++cnt;
ch[cl] = ch[q], fa[cl] = fa[q], len[cl] = len[p] + 1;
fa[cur] = fa[q] = cl;
for (; p && ch[p][c] == q; p = fa[p]) ch[p][c] = cl;
}
}
return cur;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
string s, t;
cin >> s >> t;
int n = s.size();
int las = 1;
for (auto c : s) las = ins(las, c - 'a');
for (int i = 2; i <= cnt; i++) {
G[fa[i]].emplace_back(i);
}
vector<Mint> sf2(n + 2), sf1(n + 2), sf0(n + 2);
for (int i = n; i >= 1; i--) {
sf2[i] = sf2[i + 1] + (LL(i) * i % P);
sf1[i] = sf1[i + 1] + i;
sf0[i] = sf0[i + 1] + 1;
}
vector<Mint> ps2(n + 2), ps1(n + 2), ps0(n + 2);
for (int i = 0; i <= n; i++) {
ps2[i + 1] = ps2[i] + sf2[i];
ps1[i + 1] = ps1[i] + sf1[i];
ps0[i + 1] = ps0[i] + sf0[i];
}
vector q(cnt + 1, vector<tuple<int, int, Mint>>());
{
Mint ans;
int l = 0, cur = 1;
for (auto c : t) {
c -= 'a';
while (cur != 1 && !ch[cur][c]) {
cur = fa[cur];
l = len[cur];
}
if (ch[cur][c]) {
cur = ch[cur][c];
l++;
}
if (cur != 1) {
q[cur].emplace_back(len[fa[cur]] + 1, l, 1);
sum[fa[cur]] += 1;
}
}
auto dfs = [&](auto self, int u)->void {
for (auto v : G[u]) {
self(self, v);
sum[u] += sum[v];
}
if (u != 1) {
q[u].emplace_back(len[fa[u]] + 1, len[u], sum[u]);
}
};
dfs(dfs, 1);
}
vector<Mint> f2(n + 1), f1(n + 1), f0(n + 1);
Mint ans;
auto sol = [&](auto self, int u, Mint s2, Mint s1, Mint s0, Mint d)->void {
for (auto [l, r, val] : q[u]) {
s2 += (ps2[r + 1] - ps2[l]) * val;
s1 += (ps1[r + 1] - ps1[l]) * val;
s0 += (ps0[r + 1] - ps0[l]) * val;
d += val * (r - l + 1);
}
if (ed[u]) {
f2[len[u]] = s2 - d * sf2[len[u] + 1];
f1[len[u]] = s1 - d * sf1[len[u] + 1];
f0[len[u]] = s0 - d * sf0[len[u] + 1];
}
for (auto v : G[u]) {
self(self, v, s2, s1, s0, d);
}
};
sol(sol, 1, 0, 0, 0, 0);
for (int i = 1; i <= n; i++) {
f2[i] += f2[i - 1] + 2 * f1[i - 1] + f0[i - 1];
f1[i] += f1[i - 1] + f0[i - 1];
f0[i] += f0[i - 1];
ans += f2[i];
}
cout << ans << "\n";
return 0;
}
详细
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 0ms
memory: 34736kb
input:
aababbabbaaabaabbaabaabaabbabbabbbbaabbbbaabaaabababbabbbaaa bababaabbbbabbbbbabbbbaabbaabaaaababbaaaabbbaabbaabbbbabbaba
output:
496507152
result:
ok "496507152"
Test #2:
score: 10
Accepted
time: 4ms
memory: 33844kb
input:
eececaecacbeabdeeaccdbbebbabddecebdcdebdbccbbddaaaeedaaebcdb acdaabeaaaeeedcadcaeeaaeaaeeceaebbedcadaaebaaaaddbeedeeabaea
output:
580397857
result:
ok "580397857"
Test #3:
score: 10
Accepted
time: 4ms
memory: 34736kb
input:
fcdfggfggcbedeccchceggdfedgecghhacegbbehegdhcgbefdadbeaghgcc ebbeegcfhhedfhchfdechefaafgaeacacdfgbhdbghedghdechgbdecebaef
output:
380084227
result:
ok "380084227"
Test #4:
score: 10
Accepted
time: 8ms
memory: 33396kb
input:
boodjlblcmmbdiejhhfcomlcingbgkhhifkbalmchidkbidipjkofgandgoj afaikkjkfgnmoagpikiidcgiigfmmdfmjgedanogdlccljbedjmgmcoeidae
output:
171472585
result:
ok "171472585"
Test #5:
score: 10
Accepted
time: 4ms
memory: 34716kb
input:
ksadeedmbrojirllkmtrkdhofjgjetrojrkfnnrhceqkbhnllfanahhgiohm ffsooatinippmdrfcdiniihahospagtflklfkknqlidddnbfqjtesgqfmpnn
output:
122853177
result:
ok "122853177"
Test #6:
score: 10
Accepted
time: 0ms
memory: 33964kb
input:
tqqeyqzvmvdnrgbdtwezhvpxjehcpehiwxoxnpsakxpedqhzmnywjovuucwj idthdhgqwasjxincaubpjclssinmnlxxrqeuxkmvkfejpropnrextrrlcgxp
output:
113266102
result:
ok "113266102"
Subtask #2:
score: 20
Accepted
Dependency #1:
100%
Accepted
Test #7:
score: 20
Accepted
time: 4ms
memory: 34752kb
input:
aaababbbbbbaabbbbbbabbbabbabbbabaaaabbabbbbbaabbaaabbbbaabbabbbbaabbbbaaabababaababaaabaaaabaaaaabbbbaabbaabbbbabaabbbabaaaaaaaabbaabaabaaabbabbababbaabbabbabaaaaaaaababbbababababaaabbaabbbbbabbababbbaabaababbbabbbbaaabbbababbbbaaabaababbbaabbabaabababbababaaaaabaaaabbabbbbbabbbaaabbababbabaaaababab...
output:
520547094
result:
ok "520547094"
Test #8:
score: 20
Accepted
time: 0ms
memory: 34664kb
input:
adcbdbecdaabaecdaadbbceecedbeababddbcedaeabceaabcbdadcebdaedaaadbdeaccceaabbaddeebaddebebcceeccccccbbeabbbdbcdbbedbeeeabdcadbcaabacabcbdbbbdeebacdccecddcabdcdebdbbaaeabbbbcbdadbccaecdbcbccaddabbcbacadebdcedccaadbcdacaeeccecdcabcebddabcebaedccebcbdeaebcabccdbccecdedabecaebeddbcddcdbcacbacccaceadeceac...
output:
782266849
result:
ok "782266849"
Test #9:
score: 20
Accepted
time: 0ms
memory: 33500kb
input:
baecgaafgfbdfffcgbffdadabbchacebcadaadghahcgehacafhdfcdgefgehcfbdacdeacehecddcfdaegfgbecgcgfedhhebdabfeachdfbabbehhcbdfhfdfbhebdfedgbhgdgbbabcbfbahcdecaahchddcahfgaeeedffdghedafcdahfbhedghgahffffbbbegghefehgbbbbagchcffbdfaacfgeghaegaadehbfacgbabacggdcddcgaacgaccgccbgbddcfcdgddabbedfhgdagfgghbecdgafb...
output:
367143412
result:
ok "367143412"
Test #10:
score: 20
Accepted
time: 3ms
memory: 34452kb
input:
hdnhnmolcjkclidbagdicfpnpjfohpgodegaaelcofejnhkonngpdgmcpbagbgfeklekppmneahbhbpepgecmaelcebdkghfblpbkmoomfpehpigfmibnmmpanckejpfepgolfmhkllbkehpapanlmmlkogohfdlekjppfhjbcllgclhclenibjcppahedcjnmimbpgccboidjpfeedmfmoelolpcoipkbmlacocdmlgfkmjopgdleigddffboelpahpcfcfbnmghipghfjckbinfncglgckhjkjomppjlfa...
output:
661539752
result:
ok "661539752"
Test #11:
score: 20
Accepted
time: 4ms
memory: 33688kb
input:
bcslnfnhcghmeifrrqjktgkhenisgkeheckktpjcbqgrelonaqetcgsslgqrimqmgscsndaptsepcljchfnbllloradfmljljejchbjhtoobfdpeiirllifiiifblhmalnpsoernkehhhclidalojjprjmkbtobkhibbnshpcgpciscdtnsiofferqfrkstkhadmlchfichjbbmmhcabhfffncoqbngigbaretcmocbhdgtkiteiqjfcmlsneqncrftbeogsqtrlfqoghsgehdgloqqkmjnboeplsbbgatss...
output:
507358998
result:
ok "507358998"
Test #12:
score: 20
Accepted
time: 4ms
memory: 34652kb
input:
vkypxiucqbsajxealvcbnymcevlaehbzrbqqjlsbomczkiaxdeatfoxjjkkotnpmogcatvbhjfhvojstpsmujlesvqgqfyctefvxczglenhsyboowcifooxlggcleehklchnbpbificdlqthteohsmubuwmadtkowtezifjnpmtcemkxsyglmbmizaieuutsnztygdnvpgztvjtnkbaycojepriloddbcwbibpfsxfouqhkcikdnbmtsdbfthivlgywkpdcpkqjdxtfigixjwqbctgvcqqoyrkignlvabhdb...
output:
138681994
result:
ok "138681994"
Subtask #3:
score: 30
Accepted
Dependency #2:
100%
Accepted
Test #13:
score: 30
Accepted
time: 3ms
memory: 34428kb
input:
abababbbbaabbbaabaaababbabaaababababababbababbbabbbbbaabbababababbbbababbbabbbbaaabbbbbaaaababbbaaaabbabaaabbbabababbbbbaaaabaaaaaaababaabbbabaabbbaabbabbbabbaabbabbbbaaabaaabbbabbbaaabbbbabbbabaaabaaabaabbbaaaabaaabbbababababbaabaaabaaabaabaabaabbbbabbbababaaaabbbbbabbaaaaaaababaabbbbbbbbabbbababbb...
output:
775805062
result:
ok "775805062"
Test #14:
score: 30
Accepted
time: 4ms
memory: 34112kb
input:
dadbaeeadbddeddcebeeadbacdcabebcebdcbeebcceccebbbccdaadeaaaebbbcabeddaeacbecccadeadaabbbdbabadeabaaebeaacecacdabdedacadbddcaddaaececebcbbcbacebcdccaebdcbddabacaddecacdbbcbdbeabdcbcacacaaebabeabdcbcdedccbacdbcdeadbccbcbdcecabcceacedebceaacddcaedcbaeaadbedebdedaaccdbdedbeededbbbdcddcaebbbbcbdcaabbecac...
output:
130828441
result:
ok "130828441"
Test #15:
score: 30
Accepted
time: 9ms
memory: 34952kb
input:
aecdgaeegafcgfdbbbghfheghchdabcbfeedfbadbffhcbadchchghgfbfacgcddhhheahhbeebgfbbhadhgcfeecegahbdgaccbbbcffdddfecfabecgagaeeadfebggdhaebfcfbfcfhhfbdahdgaadadaefgdafdfhahebeghdfeebeeedeegeagbffefchcbhbfbfdabbefcbbgefdccdadafhfagabfbhghcgaddffeheaehcgccbcaahaghbebacadbagefeaeaabhchbebdebceacgedggdbhdada...
output:
97380744
result:
ok "97380744"
Test #16:
score: 30
Accepted
time: 3ms
memory: 33852kb
input:
pblokjmgoadcmjkfmomjmaekljffdmbcnmbhfnndnbfjkaogokpkkdegmjlpfmbcjcjopgcmhhfbhehfogpjjdpfmkebggdpimoidaekhkmpodemkefdhejeonffdjemfceicidkcpjacnnmbcajhjnfgckklpgbbkjecmoflhfoeckgfkpmdmbkomeklklmeeagbolmfbkkdfaippedlgnjcbdnlojpdkfeibaoclifaiophccciplkaphlnbkalaedbfbdajiabgpijckbbgmcfdnceidpihdjmemmoemp...
output:
602469189
result:
ok "602469189"
Test #17:
score: 30
Accepted
time: 4ms
memory: 33968kb
input:
bcanoaimlmscgbdkdptbcsoacfqbjkfcegpsgplrtblfogqrbpkenrehcnamdggtmcskjbtjccoiicfjrqfcfcbhpclkisjmmhobancohrcptiqjqcdbqfaltmbhkclocfpcksrjhleslmthgdacabntngspbbjdsqrigojnsfejrdregjsscmrhkhclidggaegskpmiaisslhokimilqsstfncgqjmifthpglqhtgrkflmnpnqmlhdiafoigtrlkqtqhhdsnmakpnplgmpjtsrldetkdinnembdtrnejoof...
output:
640668306
result:
ok "640668306"
Test #18:
score: 30
Accepted
time: 4ms
memory: 35208kb
input:
gkyjquqqernkdsxsifohrnklzzxnikoounxmjpcnirxmjueucsdtipehodwwplmlalxjabwjsvvesbyuvbpdtvmhajeqwsbyebhecfpvambsnzmlcdovydfzojrkdskhvroywdvyswrfvfszljxjmckanbmqwwyrpopntkllietdklfvucgierkruwhsuhkjvbwpoicwmvcyhhvdlcmpvwirvrkpzwzwzvnpfqmslqsuzoyksmbpkjgfasvbqwyqrnfzdttrlllkbjwtxxkigrnjlkkcgisawzzbtssgferh...
output:
242076649
result:
ok "242076649"
Subtask #4:
score: 25
Accepted
Dependency #3:
100%
Accepted
Test #19:
score: 25
Accepted
time: 8ms
memory: 43564kb
input:
abbabbbaabbabbaaaababbbabbbbbaabbbbaabaaabbabbabbababaabbbabbbaaaabbbbbbbabababaaaabaaaaabbbabaabbbaababbbbbbabbaabbabbaaaaababbbabbbbbbbaaabbabbbaaababbabbaaabbbbababaababbababbaabbbabababbbabaaaaaabbaaabbbabbaaabaaaaabbbbaabaababbbababaaaabaaabaababaaabaababaaabaabbabaaaabbbbbaabbabaabbabbabaabbaa...
output:
743975419
result:
ok "743975419"
Test #20:
score: 25
Accepted
time: 11ms
memory: 40576kb
input:
dadbceeaceadceeceeedceceadbccceaceeaadaceaabeaaabaddecaebbcddddbecdecacdcecdbcddccdeeddcecaacedbdbbdbabaedddbbbaabecaaebeabcbeaecdcadbaaeddcabdaccceecbeecdaeabbeeeeaebbaeeaccccbcbdbceaccabebedcdaeabbadacaeeccbeacdeeadedabdaadaadebdcdaeecedaaeadaebbeebcebcdcebbccaceebbdacabcedbaecbabbcbebacedeeceaecb...
output:
950379326
result:
ok "950379326"
Test #21:
score: 25
Accepted
time: 15ms
memory: 38804kb
input:
eeghdafhfgadahfdccfehbbabhhfeceahcacdfcadcddbaheceabfbcgabefdafccfffchfgbabcaagcegechgaahefcecfhacecbcacccedcdfhbbbbhbbgggbcagbaagdbaddcfhfacdheeafebgchedcebdfbbacbdfebfbbheadbaafbghbcddhegegaeabhgfadhbcdbgebgbdfbehehgafcgfghhgfegadachbaddhfgegcdcbccgebedadbfhhfdhhcbafehccdaegcfafdfghagcbdcaafahhbhe...
output:
173737384
result:
ok "173737384"
Test #22:
score: 25
Accepted
time: 8ms
memory: 40816kb
input:
hibgeiodleahonhcoknbamcdjaembbgjkipoaoblcbdaokcmfpoflaiebnacohliplgpjhlliomhiodnobcjclodiofgfbpemfefnpafnmmfladjbfcdaagipmpenojjdnoamogjlcogcbpehbhhcoabkpfhnoaalobhmhahjpnmamahohpafpbpogglfglaemibdiinhgjicjpaaoagnbflimgnccnhoficoapfginjbnjblkhjlnedjlalnocldknblmhbeekfbehnoogjlknefnaclcopnlaiihjmmecn...
output:
836988517
result:
ok "836988517"
Test #23:
score: 25
Accepted
time: 11ms
memory: 40444kb
input:
sgqtkkjnsmjoacqqnidrmlonqeannkedimckddebhnhthdpbelkqcecsbcloehrnaldphtiofqomljfpmqeomsenmqtqpqjpafchelbjtpccrtsjpoqamaneifmebclnhoadrcnqjhssgiiocqogqtcrepbsrelqkmlhgqppdoocooqjccpsbkhsfiqofhcplnprkkffqlhdrpmtrtrljfjoffaceckqqffshkdqbdtssdjqohteeikbfdqjfgrndplcfhstkjjietqtsppopfhaidcgbtteodhmkfdahmil...
output:
72880325
result:
ok "72880325"
Test #24:
score: 25
Accepted
time: 12ms
memory: 38384kb
input:
vroqptfrssjnqoungjzfrdlzobofwvgtpxmeqrxkjhxcvsrebsjvvwulxlrwizpxwbcnvbxgivignbkqtvlrriepvvldvcdtghgbighrdszqtlipgwgxekobizgfejykqhlznusqoriieqzkmhjstytbzagdlhncoaddxvtlobtstucibnavlwylyhqjoglegohdlapzdktyhxgiljfwfejflaobgcfosmueolftvzrcwanhjsgqypvjrjkznrogdkmrvrmssexrgkapegfdyaoplbpzsffwptpkkccfizwq...
output:
307364626
result:
ok "307364626"
Subtask #5:
score: 15
Accepted
Dependency #4:
100%
Accepted
Test #25:
score: 15
Accepted
time: 606ms
memory: 237824kb
input:
aaaaababababbbbbbbaaaaaaabababbbabbaabbbbbaabbaabaabaababaaabbbbbabbbbaaaabbababbaabbaaaaaabbbbabaabbabababbbbaaaaabaabaaaabbbabbaababbbaaabaaaababbaaaaaababbbabbbaaababaabaabbaabaababbbbabaaabaabaaabaaaaabaabbaaaabbbabaabbbbbaababbaaaabaabbabbaaaaabaaabbabbaaabaababbabababaabaabbbbbaabbbbabbaaaabba...
output:
756138565
result:
ok "756138565"
Test #26:
score: 15
Accepted
time: 474ms
memory: 194880kb
input:
eebbddedeedabaaaccbadddbacebbeecebdeeccabcaaeaaccdcdbcedeaeabeccccbdeaddaedebadbdaeeeaedceaaaedcbbadedbeebaddeebeacecbebccbcbbedabdecbadcabaecdbeccbddcbabdceacebaadbacadaccdaacecbcbaaddbaddeeeeaacceecbbcedceccccaccdbabbdaaaaaaeabeccceebeaabccbbcbeecaddbdadaeadadadebbddbeaecededcdbcbeabccdaadaddebeaa...
output:
323368
result:
ok "323368"
Test #27:
score: 15
Accepted
time: 453ms
memory: 188880kb
input:
dcbebgedhgbhcfgbdeaccaffahbdfcgaehffgbafabecgcdbhedbeaheaaafcgfggcdeedbeeggcabehfhbcaagaagfdfcbdffhbaaffgdhhedgcdhedhcdabadgcebhbaacafhhaggfcehfedadfddgdgefdffeffggdffdedaghhddcdhagcgbbdgeadagbheeebhaeagdhbhcegccaadbdcfefgcgfgcbhccdcagbcfdgdfbegefbgdfebhcgffhehbhbcgcedgchdddbaadgdaceafcfcccbdbcfhebd...
output:
696242378
result:
ok "696242378"
Test #28:
score: 15
Accepted
time: 374ms
memory: 173556kb
input:
gfbbncgcpoodckopappjdbndfpionopddaebcldcjbfmlelmdkfglcjacbpppocdpgebbhdljjhencaanggiipjkbijagldfchhdpkoidfmainafdgnlggghophfllkncbabmpjpegamdabghpbnfheehljcgdpjfpkboeadkapnbbdiaeffmjjdecflgeeldomccmfmnejofmgfbllneeaihfdnjhimgeoiadfniolnlbdmmojacjjjomgheodkcccdfhangmlbnonkmgkopdinaoeenhopjacpidmophpm...
output:
568511191
result:
ok "568511191"
Test #29:
score: 15
Accepted
time: 407ms
memory: 177704kb
input:
qeqnqejgndgqpcfbkosggdhlidbpkecgatarpjpieoqlqbntplfngnroqsbgoqfohfdcgtddntobbhaikgoqllctbqrpecbltffseibjahknhdbrjhgmsalliigmlidkfjabjbkjbmcipqredpioitfqiebleqnjfokhhaqieliahgqcnfibegkeklhohbpfhfegrapbdpncbkrhpfillkibnphbicshtcoiobkkqdmkfjrmhresiembltomoetnsncfoepdttnfbkjihfghjsbbkhnqmebcsdhetohloaip...
output:
650472067
result:
ok "650472067"
Test #30:
score: 15
Accepted
time: 415ms
memory: 175468kb
input:
dokgwkdznhzgcgvuaxilttzsxplqroyucidatgaipbpthkqkjyvctwxqmijdwhaardcmlexdgmwpymzhnwlgtkzhsimqroskrvxfzukfigvgvwpkvcsqnrzfblysaqdtncapwkuetrmqqdclfudumccppakrsplgrnvpyrttlhjbmlothtotvsjkstcmipubcrqcjlvwugxgtnbbgrwdjhndcrqmiknncdpnqnlkviqrxuudlqgvavycpqrxdemhkcuarflopdfmzzrlsxisuiwjznjcuvlezfgsmrhdxmrw...
output:
745158025
result:
ok "745158025"