QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#822710#2618. Casual DancersCarroT1212AC ✓623ms43948kbC++143.4kb2024-12-20 15:51:492024-12-20 15:51:49

Judging History

This is the latest submission verdict.

  • [2024-12-20 15:51:49]
  • Judged
  • Verdict: AC
  • Time: 623ms
  • Memory: 43948kb
  • [2024-12-20 15:51:49]
  • Submitted

answer

#include <bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
using namespace std; bool MEM;
using ll=long long; using ld=long double;
using pii=pair<int,int>; using pll=pair<ll,ll>;
const int I=1e9;
const ll J=1e18,P=998244353;
ll qp(ll x,ll y=P-2) { return y?(y&1?x:1)*qp(x*x%P,y>>1)%P:1; }
namespace FPS {
	inline ll add(ll x,ll y){return(x+=y)<P?x:x-P;}
	inline ll dec(ll x,ll y) {return(x-=y)>=0?x:x+P;}
	inline ll qpow(ll x,ll y,ll mul=1) {while(y)mul=y&1?mul*x%P:mul,x=x*x%P,y>>=1;return mul;}
	ll N;
	vector<ll> rev,_inv={0,1};
	inline void NTT_init(ll n) {
		if (N>=n&&N<n<<1) return;
		ll c=-1; N=1; while (N<n) N<<=1,c++;
		if (N>rev.size()) rev.resize(N);
		for (ll i=0;i<N;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<c);
	}
	inline void inv_init(ll n) {
		ll t=_inv.size();
		if (n>t) _inv.resize(n);
		for (ll i=t;i<n;i++) _inv[i]=_inv[P%i]*dec(0,P/i)%P;
	}
	struct fps:vector<ll> {
		friend fps operator * (fps f,fps g) {
			static ll t;
			t=f.size()+g.size()-1;
			if (min(f.size(),g.size())<=40) {
				fps ret(t);
				for (ll i=0;i<f.size();i++) for (ll j=0;j<g.size();j++)
					ret[i+j]=(ret[i+j]+f[i]*g[j])%P;
				return ret;
			}
			NTT_init(t),f.NTT(1),g.NTT(1);
			for (ll i=0;i<N;i++) f[i]=f[i]*g[i]%P;
			f.NTT(-1);
			return f.pre(t);
		}
		friend fps operator + (fps f,fps g) {
			if (f.size()<g.size()) f.swap(g);
			for (ll i=0;i<g.size();i++) f[i]=add(f[i],g[i]);
			return f;
		}
		friend fps operator - (fps f,fps g) {
			if (f.size()<g.size()) f.resize(g.size());
			for (ll i=0;i<g.size();i++) f[i]=dec(f[i],g[i]);
			return f;
		}
		#define f (*this)
		using vector<ll>::vector;
		inline fps pre(ll n) { return fps(f.begin(),f.begin()+min((ll)f.size(),n)); }
		void NTT(ll op) {
			f.resize(N);
			for (ll i=0;i<N;i++) if (i<rev[i]) ::swap(f[i],f[rev[i]]);
			for (ll i=1;i<N;i<<=1) {
				ll w1=qpow(op==1?3:332748118,(P-1)/(i<<1));
				for (ll j=0;j<N;j+=i<<1) for (ll k=j,w=1;k<j+i;k++,w=w*w1%P) {
					ll t1=f[k],t2=w*f[k+i]%P;
					f[k]=add(t1,t2),f[k+i]=dec(t1,t2);
				}
			}
			if (op==-1) {
				ll inv=qpow(N,P-2);
				for (ll i=0;i<N;i++) f[i]=f[i]*inv%P;
			}
		}
		fps inv(ll n=0) {
			if (!n) n=f.size();
			fps g={qpow(f[0],P-2)},h;
			for (ll d=1;d<n;) {
				d<<=1;
				NTT_init(d<<1),h=f.pre(d);
				g.NTT(1),h.NTT(1);
				for (ll i=0;i<N;i++) g[i]=g[i]*dec(2,h[i]*g[i]%P)%P;
				g.NTT(-1),g.resize(d);
			}
			return g.pre(n);
		}
		fps ln(ll n=0) {
			if (!n) n=f.size();
			fps h=f.pre(n);
			for (ll i=0;i+1<h.size();i++) h[i]=(i+1)*h[i+1]%P;
			h.pop_back(),h=(h*f.inv(n+1)).pre(n),inv_init(n);
			for (ll i=n-1;i>=1;i--) h[i]=h[i-1]*_inv[i]%P;
			return h[0]=0,h;
		}
		fps exp(ll n=0) {
			if (!n) n=f.size();
			fps g={1};
			for (ll d=1;d<n;) d<<=1,g=g*(fps{1}+f.pre(d)-g.ln(d));
			return g.pre(n);
		}
		friend fps operator ^ (fps x,ll y) {
			fps ret={1};
			while (y) {
				if (y&1) ret=ret*x;
				x=x*x,y>>=1;
			}
			return ret;
		}
		#undef f
	};
} using FPS::fps;
ll xa,xb,xc,k,pr,ans;
void mian() {
	scanf("%lld%lld%lld%lld%lld",&xa,&xb,&xc,&k,&pr);
	fps f(max({xa,xb,xc})-min({xa,xb,xc})+1);
	f[abs(xa-xb)]++,f[abs(xa-xc)]++,f[abs(xb-xc)]++;
	fps g={qp(3),qp(3),qp(3)};
	f=f*(g^k);
	for (ll i=0;i<f.size();i++) (ans+=f[i]*abs(i-k))%=P;
	cout<<ans*qp(2)%P;
}
bool ORY; int main() {
//	while (1)
//	int t; for (scanf("%d",&t);t--;)
	mian();
	cerr<<"\n"<<abs(&MEM-&ORY)/1048576<<"MB";
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3852kb

input:

0 0 0
1
58

output:

1

result:

ok 1 number(s): "1"

Test #2:

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

input:

1 2 2
1
100

output:

332748119

result:

ok 1 number(s): "332748119"

Test #3:

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

input:

5 2 3
4
50

output:

160212060

result:

ok 1 number(s): "160212060"

Test #4:

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

input:

-2 -1 1
2
71

output:

443664160

result:

ok 1 number(s): "443664160"

Test #5:

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

input:

-1 0 -1
4
8

output:

751764268

result:

ok 1 number(s): "751764268"

Test #6:

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

input:

-2 -2 2
5
54

output:

801060288

result:

ok 1 number(s): "801060288"

Test #7:

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

input:

-2 2 4
8
36

output:

353135983

result:

ok 1 number(s): "353135983"

Test #8:

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

input:

8 -7 1
7
28

output:

15

result:

ok 1 number(s): "15"

Test #9:

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

input:

-7 -8 0
16
54

output:

159363041

result:

ok 1 number(s): "159363041"

Test #10:

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

input:

5 11 -11
9
32

output:

717226646

result:

ok 1 number(s): "717226646"

Test #11:

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

input:

-16 1 -9
32
8

output:

855967855

result:

ok 1 number(s): "855967855"

Test #12:

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

input:

-13 28 28
37
80

output:

116405794

result:

ok 1 number(s): "116405794"

Test #13:

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

input:

6 26 -25
64
21

output:

91053409

result:

ok 1 number(s): "91053409"

Test #14:

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

input:

-39 23 1
31
64

output:

742331784

result:

ok 1 number(s): "742331784"

Test #15:

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

input:

-32 42 43
128
87

output:

57822539

result:

ok 1 number(s): "57822539"

Test #16:

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

input:

-80 55 -106
142
29

output:

435655440

result:

ok 1 number(s): "435655440"

Test #17:

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

input:

0 -83 -106
256
55

output:

120508896

result:

ok 1 number(s): "120508896"

Test #18:

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

input:

-100 -123 -167
91
74

output:

285780715

result:

ok 1 number(s): "285780715"

Test #19:

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

input:

252 -176 -239
512
49

output:

835642397

result:

ok 1 number(s): "835642397"

Test #20:

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

input:

-37 -124 151
867
76

output:

225290884

result:

ok 1 number(s): "225290884"

Test #21:

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

input:

-316 149 -149
1024
87

output:

374987754

result:

ok 1 number(s): "374987754"

Test #22:

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

input:

370 545 81
1073
69

output:

943329809

result:

ok 1 number(s): "943329809"

Test #23:

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

input:

-81 182 532
2048
87

output:

843173062

result:

ok 1 number(s): "843173062"

Test #24:

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

input:

-1229 -1607 319
199
24

output:

1926

result:

ok 1 number(s): "1926"

Test #25:

score: 0
Accepted
time: 9ms
memory: 4340kb

input:

43 -419 -613
4096
46

output:

418220629

result:

ok 1 number(s): "418220629"

Test #26:

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

input:

3434 -3146 -1774
2601
46

output:

705802517

result:

ok 1 number(s): "705802517"

Test #27:

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

input:

2193 -2331 2901
8192
75

output:

728593792

result:

ok 1 number(s): "728593792"

Test #28:

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

input:

233 -4307 -4363
1093
81

output:

303899847

result:

ok 1 number(s): "303899847"

Test #29:

score: 0
Accepted
time: 38ms
memory: 7824kb

input:

-4522 762 8059
16384
34

output:

190696426

result:

ok 1 number(s): "190696426"

Test #30:

score: 0
Accepted
time: 59ms
memory: 8352kb

input:

-5155 -3639 15798
24822
55

output:

808461103

result:

ok 1 number(s): "808461103"

Test #31:

score: 0
Accepted
time: 80ms
memory: 12368kb

input:

15234 4368 12248
32768
19

output:

115861480

result:

ok 1 number(s): "115861480"

Test #32:

score: 0
Accepted
time: 106ms
memory: 12840kb

input:

820 30492 3951
42789
76

output:

826647308

result:

ok 1 number(s): "826647308"

Test #33:

score: 0
Accepted
time: 176ms
memory: 21824kb

input:

1372 -24835 -24597
65536
65

output:

355997764

result:

ok 1 number(s): "355997764"

Test #34:

score: 0
Accepted
time: 201ms
memory: 22656kb

input:

-59726 17559 -45875
87143
58

output:

326130350

result:

ok 1 number(s): "326130350"

Test #35:

score: 0
Accepted
time: 405ms
memory: 40712kb

input:

-27584 51950 23030
131072
74

output:

325794325

result:

ok 1 number(s): "325794325"

Test #36:

score: 0
Accepted
time: 508ms
memory: 36708kb

input:

61155 52006 74974
164861
5

output:

160748350

result:

ok 1 number(s): "160748350"

Test #37:

score: 0
Accepted
time: 615ms
memory: 43396kb

input:

41344 -81596 -95774
200000
59

output:

965482998

result:

ok 1 number(s): "965482998"

Test #38:

score: 0
Accepted
time: 75ms
memory: 13328kb

input:

42056 -90767 -54649
24350
63

output:

132823

result:

ok 1 number(s): "132823"

Test #39:

score: 0
Accepted
time: 597ms
memory: 43248kb

input:

-74335 43393 57021
199994
67

output:

310210583

result:

ok 1 number(s): "310210583"

Test #40:

score: 0
Accepted
time: 459ms
memory: 41528kb

input:

-80838 73772 -18618
134415
57

output:

346157175

result:

ok 1 number(s): "346157175"

Test #41:

score: 0
Accepted
time: 584ms
memory: 43484kb

input:

37457 74497 -81166
199997
59

output:

26667908

result:

ok 1 number(s): "26667908"

Test #42:

score: 0
Accepted
time: 483ms
memory: 38004kb

input:

31109 -65140 -77085
162412
46

output:

12858959

result:

ok 1 number(s): "12858959"

Test #43:

score: 0
Accepted
time: 623ms
memory: 43492kb

input:

-58550 -97769 66373
199995
86

output:

789346262

result:

ok 1 number(s): "789346262"

Test #44:

score: 0
Accepted
time: 282ms
memory: 21140kb

input:

7739 58831 72332
124270
16

output:

167162440

result:

ok 1 number(s): "167162440"

Test #45:

score: 0
Accepted
time: 592ms
memory: 43296kb

input:

-97901 25173 -99145
199999
52

output:

797290311

result:

ok 1 number(s): "797290311"

Test #46:

score: 0
Accepted
time: 276ms
memory: 24040kb

input:

-87118 -60882 -86669
126103
23

output:

487838027

result:

ok 1 number(s): "487838027"

Test #47:

score: 0
Accepted
time: 587ms
memory: 43412kb

input:

-71646 69885 70206
200000
27

output:

285981891

result:

ok 1 number(s): "285981891"

Test #48:

score: 0
Accepted
time: 288ms
memory: 24656kb

input:

14475 -77173 -5177
117777
51

output:

251933976

result:

ok 1 number(s): "251933976"

Test #49:

score: 0
Accepted
time: 501ms
memory: 42980kb

input:

-35780 37165 54712
199996
14

output:

763964192

result:

ok 1 number(s): "763964192"

Test #50:

score: 0
Accepted
time: 274ms
memory: 23512kb

input:

15709 -72676 -22298
101968
17

output:

406652317

result:

ok 1 number(s): "406652317"

Test #51:

score: 0
Accepted
time: 597ms
memory: 43640kb

input:

74572 -98701 -56974
199991
62

output:

55467556

result:

ok 1 number(s): "55467556"

Test #52:

score: 0
Accepted
time: 495ms
memory: 36844kb

input:

-14644 -10031 -50353
168383
43

output:

376814948

result:

ok 1 number(s): "376814948"

Test #53:

score: 0
Accepted
time: 529ms
memory: 42760kb

input:

22388 51898 80903
199995
89

output:

832434478

result:

ok 1 number(s): "832434478"

Test #54:

score: 0
Accepted
time: 283ms
memory: 21424kb

input:

34062 -76211 -25545
127193
91

output:

234760702

result:

ok 1 number(s): "234760702"

Test #55:

score: 0
Accepted
time: 508ms
memory: 42608kb

input:

-19645 -45450 -16512
200000
77

output:

759439547

result:

ok 1 number(s): "759439547"

Test #56:

score: 0
Accepted
time: 82ms
memory: 13880kb

input:

98957 80512 -24606
20311
30

output:

985804570

result:

ok 1 number(s): "985804570"

Test #57:

score: 0
Accepted
time: 513ms
memory: 43100kb

input:

-87259 -11505 14596
199994
83

output:

160520754

result:

ok 1 number(s): "160520754"

Test #58:

score: 0
Accepted
time: 447ms
memory: 42316kb

input:

0 0 0
200000
0

output:

393458944

result:

ok 1 number(s): "393458944"

Test #59:

score: 0
Accepted
time: 448ms
memory: 42316kb

input:

0 0 0
200000
100

output:

393458944

result:

ok 1 number(s): "393458944"

Test #60:

score: 0
Accepted
time: 444ms
memory: 42380kb

input:

-100000 -100000 -100000
200000
75

output:

393458944

result:

ok 1 number(s): "393458944"

Test #61:

score: 0
Accepted
time: 439ms
memory: 42324kb

input:

100000 100000 100000
200000
63

output:

393458944

result:

ok 1 number(s): "393458944"

Test #62:

score: 0
Accepted
time: 597ms
memory: 43948kb

input:

100000 0 -100000
200000
56

output:

678255914

result:

ok 1 number(s): "678255914"

Test #63:

score: 0
Accepted
time: 435ms
memory: 42296kb

input:

0 1 2
200000
22

output:

630634769

result:

ok 1 number(s): "630634769"

Test #64:

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

input:

100000 0 -100000
1
32

output:

200000

result:

ok 1 number(s): "200000"

Test #65:

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

input:

100000 100000 100000
1
33

output:

1

result:

ok 1 number(s): "1"

Test #66:

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

input:

-100000 -100000 -100000
1
6

output:

1

result:

ok 1 number(s): "1"

Test #67:

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

input:

100000 100000 -100000
1
7

output:

332948118

result:

ok 1 number(s): "332948118"

Test #68:

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

input:

-100000 -100000 100000
1
40

output:

332948118

result:

ok 1 number(s): "332948118"

Test #69:

score: 0
Accepted
time: 38ms
memory: 12796kb

input:

100000 -100000 -100000
100
63

output:

764105630

result:

ok 1 number(s): "764105630"

Test #70:

score: 0
Accepted
time: 37ms
memory: 13256kb

input:

-100000 100000 100000
100
13

output:

764105630

result:

ok 1 number(s): "764105630"

Test #71:

score: 0
Accepted
time: 32ms
memory: 12472kb

input:

-100000 100000 0
100
10

output:

200000

result:

ok 1 number(s): "200000"

Test #72:

score: 0
Accepted
time: 273ms
memory: 25576kb

input:

-100000 100000 0
99999
77

output:

200000

result:

ok 1 number(s): "200000"

Test #73:

score: 0
Accepted
time: 247ms
memory: 25332kb

input:

-100000 100000 0
100000
80

output:

200000

result:

ok 1 number(s): "200000"

Test #74:

score: 0
Accepted
time: 277ms
memory: 25340kb

input:

-100000 100000 0
100001
5

output:

50125708

result:

ok 1 number(s): "50125708"