QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#40032#1254. Biggest Set EverAppleblue17AC ✓1113ms12096kbC++143.4kb2022-07-15 20:35:092022-07-15 20:35:12

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-07-15 20:35:12]
  • 评测
  • 测评结果:AC
  • 用时:1113ms
  • 内存:12096kb
  • [2022-07-15 20:35:09]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const long long N=1e5+5,mod=998244353,inv2=499122177,g=3;
 
long long ksm(long long f,long long x){
	long long tot=1;
	while(x){
		if(x & 1ll) tot=1ll*tot*f%mod;
		f=1ll*f*f%mod;
		x>>=1ll;
	}
	return tot;
}
 
 
long long pr[N];
long long mul[N],inv[N];
void init(long long lim){
	for(long long l=1;l<N;l<<=1ll)
		pr[l]=ksm(g,(mod-1)/(l*2));
	mul[0]=inv[0]=1;
	for(long long i=1;i<=lim;i++) mul[i]=1ll*mul[i-1]*i%mod;
	inv[lim]=ksm(mul[lim],mod-2);
	for(long long i=lim-1;i>=1;i--) inv[i]=1ll*inv[i+1]*(i+1)%mod;
}
long long C(long long m,long long n){
	if(m<0 || n<0 || m<n) return 0;
	return 1ll*mul[m]*inv[n]%mod*inv[m-n]%mod;
}
 long long ID(long long x){
	if(x & 1ll) return mod-1;
	return 1;
}
long long qmod(long long x){
	return x+(x>>31 & mod);
}
 
namespace NTT{
	long long A[N],B[N],S[N],rev[N];
	long long init(long long n,long long m){
		memset(rev,0,sizeof(rev));
		long long lim=0;
		while((1ll<<lim)<=n+m) lim++;
		for(long long i=0;i<=(1<<lim)-1;i++)
			rev[i]=(rev[i>>1ll]>>1ll) | ((i & 1ll)<<(lim-1));
		return lim;
	}
	void ntt(long long *f,long long n,long long opt){
		for(long long i=0;i<=n-1;i++)
			if(i<rev[i]) swap(f[i],f[rev[i]]);
		for(long long l=1;l<n;l<<=1ll){
			long long tmp=pr[l];
			if(opt==-1) tmp=ksm(tmp,mod-2);
			for(long long i=0;i<=n-1;i+=l<<1ll){
				long long omegf=1;
				for(long long j=0;j<l;j++){
					long long x=f[i+j],y=1ll*omegf*f[i+j+l]%mod;
					f[i+j]=qmod(x+y-mod),f[i+j+l]=qmod(x-y);
					omegf=1ll*omegf*tmp%mod;
				}
			}
		}
		if(opt==-1){
			long long t=ksm(n,mod-2);
			for(long long i=0;i<=n-1;i++)
				f[i]=1ll*f[i]*t%mod;
		}
	}
	void solve(long long *s,long long* f,long long* g,long long n,long long m){
		if(n+m<=100){
			for(long long i=0;i<=n+m;i++) S[i]=0;
			for(long long i=0;i<=n;i++){
				for(long long j=0;j<=m;j++){
					S[i+j]=qmod(S[i+j]+1ll*f[i]*g[j]%mod-mod);
				}
			}
			for(long long i=0;i<=n+m;i++) s[i]=S[i];
			long long p=n+1;
			for(long long i=p;i<=2*p;i++) s[i-p]=(s[i-p]+s[i])%mod,s[i]=0;
			return ;
		}
		long long lim=init(n,m);
		for(long long i=0;i<=n;i++) A[i]=f[i];
		for(long long i=0;i<=m;i++) B[i]=g[i];
		for(long long i=n+1;i<=(1ll<<lim);i++) A[i]=0;
		for(long long i=m+1;i<=(1ll<<lim);i++) B[i]=0;
		ntt(A,(1<<lim),1);
		ntt(B,(1<<lim),1);
		for(long long i=0;i<(1<<lim);i++) S[i]=1ll*A[i]*B[i]%mod;
		ntt(S,(1<<lim),-1);
		for(long long i=0;i<=n+m;i++) s[i]=S[i];
		long long p=n+1;
		for(long long i=p;i<=2*p;i++) s[i-p]=(s[i-p]+s[i])%mod,s[i]=0;
	}
}


long long n,r,k1,k2;
long long P[N],Q[N];
long long F[N],G[N],H[N];

int main(){
//	freopen("1.txt","r",stdin);
	init(N-5);
	cin>>n>>r;
	
	char c=getchar();
	while(!isdigit(c)) c=getchar();
	
	long long nw=0; bool fl=0;
	while(isdigit(c)){
		k1=(k1*10+(c-'0'))%n;
		nw=nw*10+c-'0';
		
		if(k2*10+nw/n>mod-1) fl=1;
		k2=(k2*10+nw/n)%(mod-1);
		nw%=n;
		
		c=getchar();
	}
	if(!k2 && fl) k2=mod-1;
	
	P[0]=1;
	if(!k1) H[0]=1;
	for(long long i=1;i<=n;i++){
		for(long long j=0;j<n;j++) Q[j]=P[j];
		for(long long j=0;j<n;j++) P[j]=(P[j]+Q[(j+n-(i-1))%n])%mod;
		if(k1==i) for(int j=0;j<n;j++) H[j]=P[j];
	}
	
	for(long long i=0;i<n;i++) F[i]=P[i];
	
	G[0]=1;
	while(k2){
		if(k2 & 1ll){
			NTT::solve(G,F,G,n-1,n-1);
		}
		NTT::solve(F,F,F,n-1,n-1);
		k2>>=1ll;
	}
	
	NTT::solve(G,G,H,n-1,n-1);
	cout<<G[r];
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 12048kb

input:

3 2
5

output:

8

result:

ok single line: '8'

Test #2:

score: 0
Accepted
time: 4ms
memory: 10848kb

input:

1 0
20

output:

1048576

result:

ok single line: '1048576'

Test #3:

score: 0
Accepted
time: 2ms
memory: 11816kb

input:

10 8
97441781169999

output:

39483594

result:

ok single line: '39483594'

Test #4:

score: 0
Accepted
time: 4ms
memory: 10716kb

input:

10 0
73529553919999

output:

913188246

result:

ok single line: '913188246'

Test #5:

score: 0
Accepted
time: 5ms
memory: 10684kb

input:

10 5
7216893652

output:

803006513

result:

ok single line: '803006513'

Test #6:

score: 0
Accepted
time: 5ms
memory: 10992kb

input:

51 4
490466735660935366104362911237439817660296497884511278059120667639249811034386376211440059814876153833104198879999

output:

754741857

result:

ok single line: '754741857'

Test #7:

score: 0
Accepted
time: 5ms
memory: 10524kb

input:

45 0
6216871967465786523158710331777577058507955388049665933617608862925909208090781993189722633093256714163855609550090284484136100755698161980229368887021285893611742334609577808667250730098679567168835635687562524497440298178123243152474212724715349775392879081815671155873083166544656572426801376...

output:

247716490

result:

ok single line: '247716490'

Test #8:

score: 0
Accepted
time: 3ms
memory: 10356kb

input:

123 95
82762777129999

output:

104574851

result:

ok single line: '104574851'

Test #9:

score: 0
Accepted
time: 3ms
memory: 11744kb

input:

100 8
31437474627210849758566270683758273881261075882083602376365854183768172131884521374556483688326470349999

output:

204425046

result:

ok single line: '204425046'

Test #10:

score: 0
Accepted
time: 0ms
memory: 11800kb

input:

101 65
129135732687243444162224693341284265097302999818949156642879266983062901971745283891629743024085567839999

output:

902554661

result:

ok single line: '902554661'

Test #11:

score: 0
Accepted
time: 3ms
memory: 11780kb

input:

102 0
3488151969475412325389878205822308160017247852281650623347454005909349359794006198664575307015721114499999

output:

162486241

result:

ok single line: '162486241'

Test #12:

score: 0
Accepted
time: 20ms
memory: 10808kb

input:

1012 291
7646813626

output:

980146392

result:

ok single line: '980146392'

Test #13:

score: 0
Accepted
time: 1ms
memory: 11620kb

input:

10 1
8252321334895940615769970904772140913784950414733677250236907211278760730743749190165425246198980003063223759998857676592610546612494049860039116369420896260329913339201912705127782100719073680933781912596330763621573961781964610789874205137283507240907978239171437180129623254976853141357534721...

output:

652741132

result:

ok single line: '652741132'

Test #14:

score: 0
Accepted
time: 1060ms
memory: 11716kb

input:

10000 7418
3245239614838766441165109131458206859599048822364196500920217765340625035454604743711500986644932444050563968810069079688108908878846571710567968402401812796927116289077099295526340820005662199516680283500266534222567954309211983031474586099314642398538154929871106845369013158161741156285...

output:

698356153

result:

ok single line: '698356153'

Test #15:

score: 0
Accepted
time: 1069ms
memory: 11856kb

input:

9999 779
358336376636226042717427621455961243958393374012413730691317569180699582766828947496902145881339115917085532012414592514320100982450700615324388139090946345231102734023340224881463299658303159811283914016535239877151817544726113079790779414960958512664223829472539894897355539363031791406089...

output:

837883243

result:

ok single line: '837883243'

Test #16:

score: 0
Accepted
time: 1111ms
memory: 11920kb

input:

10000 0
5959081123960981456052979042226085365217802503520521998482870583390422819313350263042136451463933153462392827184151729621677652847629006369849703956071611814775739516186470151700231702587051465357283648453972097435393937208562095551505345722276019216674741689533178156201652677931133018670075...

output:

924699691

result:

ok single line: '924699691'

Test #17:

score: 0
Accepted
time: 1025ms
memory: 12096kb

input:

10000 9535
4529914918413777622528043117043450937202591529390096894597801955131392043838551780190373994052685563959267673748578051484778843491690348530040553041327206108222053240121197654468570203072462947279505179444683716795754611201162765280673498257918169149948361212426058346508829709396950512100...

output:

984036477

result:

ok single line: '984036477'

Test #18:

score: 0
Accepted
time: 937ms
memory: 10824kb

input:

9240 4639
27361723410151521150732754757747824591816341408004277395827380018571695767504374102641417978743103148415278527868597085535196798439563729486914117045504466181228391680543038904853912910914033179148538533773830859471039264891096812737067663728830538925263207278489348217296058385024096176645...

output:

918206285

result:

ok single line: '918206285'

Test #19:

score: 0
Accepted
time: 830ms
memory: 11904kb

input:

8640 0
36542487284167251663740647042989590271004990959161565599035618320359555884164889579638216196822119364835481192513876617252278990351166475479529866772377957875189299536492571051813538976297743058308068985113568320877021600430398281676260145773030952556440352937340499556103082922663344786146031...

output:

183559339

result:

ok single line: '183559339'

Test #20:

score: 0
Accepted
time: 790ms
memory: 11836kb

input:

8400 300
288271854704449002303660023988228953095431900267967796390634942331317772470120001601892932430552455756800781384921666042619127984502628855577098517482540354318793004328371417736520135839821219973136389836602550635594752488595369449820630558647394225301132623150116886896899160930010237898661...

output:

236192822

result:

ok single line: '236192822'

Test #21:

score: 0
Accepted
time: 1041ms
memory: 10608kb

input:

9900 7932
60696943972373113723790595629126483514286522739943462090310067978198194825062752363577899690215576140733032790987877947244269329280647842553127506268616051081441746603578834885861401552062986268589398127724619814495854782291653679848340686262859158150894989658137076297136845970234357040248...

output:

957197274

result:

ok single line: '957197274'

Test #22:

score: 0
Accepted
time: 679ms
memory: 12020kb

input:

8064 0
47334321587030653743112677374440705129805126456129176300634909485205142778452960069919888488272962888344558362309553430584472473664877747506095230385831376281275441466113307422446138481496975295148631099507964104577181484367166622611546731949305572711810831571898086598100505274361166695152297...

output:

669865153

result:

ok single line: '669865153'

Test #23:

score: 0
Accepted
time: 585ms
memory: 10980kb

input:

7560 4251
33923778033803241908219943724011782970171842843279830346925914273149746589031596306410354155061775627084155077246765927736846008968413480151788681683200760666695266835650540805104008248152259180695495822884752048464024168111056913040542477162151971025210582160878305329922703362973968810986...

output:

416930414

result:

ok single line: '416930414'

Test #24:

score: 0
Accepted
time: 5ms
memory: 10724kb

input:

1 0
1

output:

2

result:

ok single line: '2'

Test #25:

score: 0
Accepted
time: 5ms
memory: 11828kb

input:

20 0
1

output:

2

result:

ok single line: '2'

Test #26:

score: 0
Accepted
time: 2ms
memory: 11820kb

input:

20 13
1

output:

0

result:

ok single line: '0'

Test #27:

score: 0
Accepted
time: 1113ms
memory: 10996kb

input:

10000 4469
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999...

output:

290641673

result:

ok single line: '290641673'

Test #28:

score: 0
Accepted
time: 679ms
memory: 11788kb

input:

7560 4041
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999...

output:

74525042

result:

ok single line: '74525042'

Test #29:

score: 0
Accepted
time: 1057ms
memory: 11836kb

input:

9973 5944
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999...

output:

881015534

result:

ok single line: '881015534'

Test #30:

score: 0
Accepted
time: 927ms
memory: 11792kb

input:

9240 105
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999...

output:

971384312

result:

ok single line: '971384312'

Test #31:

score: 0
Accepted
time: 769ms
memory: 11072kb

input:

9240 407
3576

output:

801993513

result:

ok single line: '801993513'

Test #32:

score: 0
Accepted
time: 908ms
memory: 11928kb

input:

9240 551
204209679712117827730880226353510653024223856012233043639816521107053027427255530900909664190550923070609753205194078932813278453978969048551211039657884854091997550079122709572652601873661760656527148885540570009859983720628938737170862051434146563351143193685385454224852792784922646291244...

output:

119770088

result:

ok single line: '119770088'

Test #33:

score: 0
Accepted
time: 900ms
memory: 11108kb

input:

9192 1641
28752004253121823698377995642551444541478381100254351866855183106035619529957426500407613584351534638072131717174182778385021012676126168908318080221306891576946788376768991282644482141901027923976862288282903183550700780004336592004853856682722677717408026522325784466832796601495789309612...

output:

634482984

result:

ok single line: '634482984'

Test #34:

score: 0
Accepted
time: 748ms
memory: 12068kb

input:

9108 417
2572

output:

585665409

result:

ok single line: '585665409'