QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#174588 | #7187. Hardcore String Counting | Crying | AC ✓ | 1974ms | 32336kb | C++14 | 3.5kb | 2023-09-10 10:13:13 | 2023-09-10 10:13:14 |
Judging History
answer
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops")
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
const ll MAXN=(1<<22),mod=998244353;
void add(ll& x,ll y){x=(x+y)%mod;}
void sub(ll& x,ll y){x=(x-y+mod)%mod;}
ll addv(ll x,ll y){return (x+y)%mod;}
ll subv(ll x,ll y){return (x-y+mod)%mod;}
void tomax(ll& x,ll y){x=max(x,y);}
void tomin(ll& x,ll y){x=min(x,y);}
ll mypow(ll a,ll n){
ll ret = 1,pw = a;
while(n){
if(n&1)ret = ret * pw%mod;
pw = pw*pw%mod;
n>>=1;
}
return ret;
}
ll myinv(ll a){
return mypow(a,mod-2);
}
const ll div3 = myinv(3);
typedef vector<ll> Poly;
int SZ(const Poly& v){return v.size();}
void up(Poly& v,int n){
if(SZ(v) < n)v.resize(n,0);
}
void cut(Poly& v,int n){
if(SZ(v) > n)v.resize(n,0);
}
void reset(Poly& v,int n){
up(v,n);
cut(v,n);
}
Poly operator+(const Poly& x,const Poly& y){
Poly z(max(SZ(x),SZ(y)),0);
rep(i,0,SZ(z)-1){
z[i] = addv((i<SZ(x)) ? (x[i]) : (0),(i<SZ(y)) ? (y[i]) : 0);
}
return z;
}
Poly operator-(const Poly& x,const Poly& y){
Poly z(max(SZ(x),SZ(y)),0);
rep(i,0,SZ(z)-1){
z[i] = subv((i<SZ(x)) ? (x[i]) : (0),(i<SZ(y)) ? (y[i]) : 0);
}
return z;
}
namespace _{
ll f[MAXN],g[MAXN],h[MAXN],W[MAXN];
int rev[MAXN],N;
void transform(ll* f){rep(i,0,N-1)if(i<rev[i])swap(f[i],f[rev[i]]);}
void DFT(ll* f,ll a){
transform(f);
ll pw = mypow(a,(mod-1)/N);
W[0]=1;rep(i,1,N-1)W[i] = W[i-1]*pw%mod;
for(int len=2;len<=N;len<<=1)for(int i=0;i<N;i+=len)rep(j,0,len/2-1){
ll w = W[j*(N/len)];
ll x = f[i+j],y = f[i+j+len/2];
f[i+j] = addv(x,w*y);
f[i+j+len/2] = subv(x,w*y%mod);
}
}
void FFT(const Poly& x,const Poly& y,Poly& z){
int n = SZ(x)-1,m = SZ(y)-1;
N=1;while(N<=n+m)N<<=1;
rep(i,0,N-1){
f[i] = g[i] = h[i] = 0;
rev[i] = rev[i>>1] >> 1;
if(i&1)rev[i] |= (N>>1);
}
rep(i,0,n)f[i] = x[i];
rep(i,0,m)g[i] = y[i];
DFT(f,3);DFT(g,3);
rep(i,0,N-1)h[i] = f[i]*g[i]%mod;
DFT(h,div3);
reset(z,n+m+1);
ll inv = myinv(N);
rep(i,0,n+m)z[i] = h[i]*inv%mod;
}
};
Poly operator*(const Poly& x,const Poly& y){
Poly z;
_::FFT(x,y,z);
return z;
}
//
void adjust(Poly& p,int k){
int i;
for(i=k;i<p.size();i+=2)p[i/2]=p[i];
p.resize(i/2);
}
ll bostan_mori(Poly p,Poly q,ll n){
while(n){
int k=(n&1);n>>=1;
Poly rq=q,op,ep;
for(int i=1;i<rq.size();i+=2)rq[i]=subv(0,rq[i]);
q = q * rq,op = ep = p * rq;
adjust(q,0);
adjust(op,1);
adjust(ep,0);
if(!k)p=ep;
else p=op;
}
ll ans=(p.size())?(p[0]*myinv(q[0])%mod):(0);
return ans;
}
namespace CFM{
const int MAXN = 1e5+10;
ll n,m;
string s;
int nxt[MAXN];
void solve(){
cin>>n>>m>>s;
s=" "+s;
for(int i=2,j=0;i<=n;i++){
while(j && s[j+1] != s[i])j = nxt[j];
if(s[j+1] == s[i])j++;
nxt[i] = j;
}
Poly f(n,0),P(n+1,0),Q(2,0);
P[n] = (mod-1);
Q[0] = 1;
Q[1] = (mod-26);
for(int i = nxt[n];i;i=nxt[i]){
f[n-i] = (mod-1);
}
f[0] = 1;
rep(i,1,n-1)f[i] = (mod - f[i])%mod;
Q = f * Q;
P = Q-P;
ll ans = bostan_mori(Q,P,m);
ans = (mod-ans)%mod;
cout<<ans<<endl;
}
};
int main(){
CFM::solve();
return 0;
}
这程序好像有点Bug,我给组数据试试?
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 11708kb
input:
6 7 aaaaaa
output:
25
result:
ok answer is '25'
Test #2:
score: 0
Accepted
time: 3ms
memory: 11764kb
input:
3 5 aba
output:
675
result:
ok answer is '675'
Test #3:
score: 0
Accepted
time: 2ms
memory: 11860kb
input:
1 1 a
output:
1
result:
ok answer is '1'
Test #4:
score: 0
Accepted
time: 2ms
memory: 11704kb
input:
5 7 ababa
output:
675
result:
ok answer is '675'
Test #5:
score: 0
Accepted
time: 0ms
memory: 13860kb
input:
1 3 a
output:
625
result:
ok answer is '625'
Test #6:
score: 0
Accepted
time: 3ms
memory: 12064kb
input:
10 536870912 njjnttnjjn
output:
826157401
result:
ok answer is '826157401'
Test #7:
score: 0
Accepted
time: 809ms
memory: 19976kb
input:
65535 536870912 aaaoaaaoaaaoaaayaaaoaaaoaaaoaaayaaaoaaaoaaaoaaayaaaoaaaoaaaoaaaeaaaoaaaoaaaoaaayaaaoaaaoaaaoaaayaaaoaaaoaaaoaaayaaaoaaaoaaaoaaaeaaaoaaaoaaaoaaayaaaoaaaoaaaoaaayaaaoaaaoaaaoaaayaaaoaaaoaaaoaaaeaaaoaaaoaaaoaaayaaaoaaaoaaaoaaayaaaoaaaoaaaoaaayaaaoaaaoaaaoaaaraaaoaaaoaaaoaaayaaaoaaaoaaao...
output:
996824286
result:
ok answer is '996824286'
Test #8:
score: 0
Accepted
time: 1974ms
memory: 32228kb
input:
99892 536870912 wwwwbwwwwbwwwwqwwwwbwwwwbwwwwqwwwwbwwwwbwwwweewwwwbwwwwbwwwwqwwwwbwwwwbwwwwqwwwwbwwwwbwwwweewwwwbwwwwbwwwwqwwwwbwwwwbwwwwqwwwwbwwwwbwwwwawwwwbwwwwbwwwwqwwwwbwwwwbwwwwqwwwwbwwwwbwwwweewwwwbwwwwbwwwwqwwwwbwwwwbwwwwqwwwwbwwwwbwwwweewwwwbwwwwbwwwwqwwwwbwwwwbwwwwqwwwwbwwwwbwwwwawwwwbwwwwb...
output:
718505966
result:
ok answer is '718505966'
Test #9:
score: 0
Accepted
time: 1910ms
memory: 32044kb
input:
100000 536870912 rrmrrqrrmrrcrrmrrqrrmrrbrrmrrqrrmrrcrrmrrqrrmrrnnrrmrrqrrmrrcrrmrrqrrmrrbrrmrrqrrmrrcrrmrrqrrmrrttrrmrrqrrmrrcrrmrrqrrmrrbrrmrrqrrmrrcrrmrrqrrmrrnnrrmrrqrrmrrcrrmrrqrrmrrbrrmrrqrrmrrcrrmrrqrrmrrarrmrrqrrmrrcrrmrrqrrmrrbrrmrrqrrmrrcrrmrrqrrmrrnnrrmrrqrrmrrcrrmrrqrrmrrbrrmrrqrrmrrcrrm...
output:
824845147
result:
ok answer is '824845147'
Test #10:
score: 0
Accepted
time: 1887ms
memory: 31960kb
input:
99892 1000000000 ggggjggggjggggxggggjggggjggggxggggjggggjggggeeggggjggggjggggxggggjggggjggggxggggjggggjggggeeggggjggggjggggxggggjggggjggggxggggjggggjggggbggggjggggjggggxggggjggggjggggxggggjggggjggggeeggggjggggjggggxggggjggggjggggxggggjggggjggggeeggggjggggjggggxggggjggggjggggxggggjggggjggggbggggjgggg...
output:
971128221
result:
ok answer is '971128221'
Test #11:
score: 0
Accepted
time: 1865ms
memory: 31320kb
input:
100000 625346716 kwfuguxrbiwlvyqsbujelgcafpsnxsgefwxqoeeiwoolreyxvaahagoibdrznebsgelthdzqwxcdglvbpawhdgaxpiyjglzhiamhtptsyyzyyhzjvnqfyqhnrtbwgeyotmltodidutmyvzfqfctnqugmrdtuyiyttgcsjeupuuygwqrzfibxhaefmbtzfhvopmtwwycopheuacgwibxlsjpupdmchvzneodwuzzteqlzlfizpleildqqpcuiechcwearxlvplatyrzxfochdfjqcmzt...
output:
0
result:
ok answer is '0'
Test #12:
score: 0
Accepted
time: 1215ms
memory: 28708kb
input:
65536 35420792 pkmyknsqmhwuevibxjgrftrinkulizarxbkmgorddvuvtrhdadnlxfrxsyqhueuefdkanysaixmhbdqyskjdrzntlaqtwoscxldmyzahzwximvjgsjuddejbsbwtxgkbzfzdusucccohjwjuaasnkindxjjtxdbxmitcixrcmawdezafgnigghdtoyzazyfedzsuwsrlkdtarcmzqnszgnyiqvzamjtamvfrhzucdsfscyzdbvbxutwraktnmfrdfbejcbhjcgczgwiucklwydmuuozlu...
output:
0
result:
ok answer is '0'
Test #13:
score: 0
Accepted
time: 1853ms
memory: 31340kb
input:
100000 1000000000 nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...
output:
545362217
result:
ok answer is '545362217'
Test #14:
score: 0
Accepted
time: 1782ms
memory: 32016kb
input:
100000 536870911 ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg...
output:
332737929
result:
ok answer is '332737929'
Test #15:
score: 0
Accepted
time: 1802ms
memory: 32064kb
input:
100000 536870911 qodtwstdnykduvzvvvzmpawqaajvcdatuzzjisoezaqtvqhghmixvlfyhznvrlhdslyyhxoqchflfdjiefikpfrykekhjqywxpwmihiojcfzcmqelrkddbpkcnqcaopdyhldawyrvkqfbqpybewrtusifbfdtxiflxtkzdjqbocozdpupunehraytkhqnobhzeohkvbjyrdfebstqfjlvrcabimlybsnuaqgfcldvklwnyuywvfpdqwmortctexzaufmazyatybltglyonllufofiyr...
output:
592710827
result:
ok answer is '592710827'
Test #16:
score: 0
Accepted
time: 1043ms
memory: 32336kb
input:
100000 100000 ciawhxojdqnivfonswbklnoocigwmkbjtkzahqgysihfdeqhialusobeeazqaqzryakqycapfswxpithldpuiflxzpgsysjwnpinfubqlyadphswzvzbrxcdbbhavtzkvwrcqecfnzawisgkvsopjnfzfnlecuesnffqzcknunwsxlrbvdzqbduypfrwgqqnrjstxgjaeuqxxajfbmidkwhrgkpjduftivfwnuugxomyznpbtbcstdkdaitvpdtuvyzipygztosvjwwdascbqthqdgkbit...
output:
1
result:
ok answer is '1'
Test #17:
score: 0
Accepted
time: 1863ms
memory: 32220kb
input:
100000 1000000000 zujpixywgppdzqtwikoyhvlwqvxrfdylopuqgprrqpgqmgfkmhbucwkgdljyfzzbtaxxnltmbptwhknjjqlbeuiowdblqppqeeuunexkghdxjtbidlacmycgwvulgaeazyiwzedaxhtskacflodouylwxfjydzfbthotdwrfcpwrkcgnxpjsmkafaaojlctmqckabidgalvptziemzphncrgtqxlvllgwwgkoqxwhziuxvkadgaohdlceuggwwzmpywsgoecwwhhbotaleesjexdxg...
output:
879141501
result:
ok answer is '879141501'
Extra Test:
score: 0
Extra Test Passed