QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#174588#7187. Hardcore String CountingCryingAC ✓1974ms32336kbC++143.5kb2023-09-10 10:13:132023-09-10 10:13:14

Judging History

This is the latest submission verdict.

  • [2023-09-10 10:13:14]
  • Judged
  • Verdict: AC
  • Time: 1974ms
  • Memory: 32336kb
  • [2023-09-10 10:13:13]
  • Submitted

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