QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#254441#7746. Go go Baron Bunny!ucup-team2230#AC ✓279ms19712kbC++142.9kb2023-11-18 12:36:492023-11-18 12:36:49

Judging History

This is the latest submission verdict.

  • [2023-11-18 12:36:49]
  • Judged
  • Verdict: AC
  • Time: 279ms
  • Memory: 19712kb
  • [2023-11-18 12:36:49]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;

using ll=long long;

#define rng(i,a,b) for(int i=int(a);i<int(b);i++)
#define rep(i,b) rng(i,0,b)
#define gnr(i,a,b) for(int i=int(b)-1;i>=int(a);i--)
#define per(i,b) gnr(i,0,b)
#define pb push_back
#define eb emplace_back
#define a first
#define b second
#define bg begin()
#define ed end()
#define all(x) x.bg,x.ed
#define si(x) int(x.size())
#ifdef LOCAL
#define dmp(x) cerr<<__LINE__<<" "<<#x<<" "<<x<<endl
#else
#define dmp(x) void(0)
#endif

template<class t,class u> bool chmax(t&a,u b){if(a<b){a=b;return true;}else return false;}
template<class t,class u> bool chmin(t&a,u b){if(b<a){a=b;return true;}else return false;}

template<class t> using vc=vector<t>;
template<class t> using vvc=vc<vc<t>>;

using P=pair<int,int>;
using vi=vc<int>;
const uint mod=998244353;
struct mint{
	uint v;
	mint(ll vv=0){s(vv%mod+mod);}
	mint& s(uint vv){
		v=vv<mod?vv:vv-mod;
		return *this;
	}
	mint operator-()const{return mint()-*this;}
	mint& operator+=(const mint&r){return s(v+r.v);}
	mint&operator-=(const mint&r){return s(v+mod-r.v);}
	mint&operator*=(const mint&r){v=(unsigned ll)v*r.v%mod;return *this;}
	mint&operator/=(const mint&r){return *this*=r.inv();}
	mint operator+(const mint&r)const{return mint(*this)+=r;}
	mint operator-(const mint&r)const{return mint(*this)-=r;}
	mint operator*(const mint&r)const{return mint(*this)*=r;}
	mint operator/(const mint&r)const{return mint(*this)/=r;}
	mint pow(ll n)const{
		if(n<0)return inv().pow(-n);
		mint res(1),x(*this);
		while(n){
			if(n&1)res*=x;
			x*=x;
			n>>=1;
		}
		return res;
	}
	mint inv()const{return pow(mod-2);}
};

ll gcd(ll x,ll y){
	if(x==0) return y;
	return gcd(y%x,x);
}
void solve(){
	ll n,k,t;
	cin>>n>>k>>t;
	ll L=0;
	while(L*(L+1)/2<=n) L++;
	L--;
	if(k!=L&&k!=L+1){
		cout<<0<<endl;
		return;
	}
	int d=gcd(L+1,t);
	int one=(n-L*(L+1)/2);
	if(one%((L+1)/d)!=0){
		cout<<0<<endl;
		return;
	}

	vc<mint> fac(L+2),finv(L+2);
	fac[0]=finv[0]=1;
	for(int i=1;i<=L+1;i++){
		fac[i]=fac[i-1]*i;
		finv[i]=finv[i-1]/i;
	}
	auto C=[&](int a,int b)->mint{
		if(a<b) return 0;
		return fac[a]*finv[b]*finv[a-b];
	};

	vc<mint> tw(L+2);
	tw[0]=1;
	for(int i=1;i<=L+1;i++) tw[i]=tw[i-1]/2;

	one/=(L+1)/d;
	int zero=d-one;
	int s=(k==L?0:1);
	mint ret=0;
	for(int B=1;B<=d;B++){
		int z=(B+1)/2,o=B/2;
		int last=(B+1)%2;
		if(s){
			swap(z,o);
			last=1-last;
		}
		if(zero>=z&&one>=o){
			//cout<<z<<" "<<o<<endl;
			//cout<<"real "<<zero<<" "<<one<<endl;
			mint w=1;
			if(z==0){
				if(zero) continue;
			} else w*=C(zero-1,z-1);
			if(o==0){
				if(one) continue;
			} else w*=C(one-1,o-1);
			int cnt=B/2*((L+1)/d);
			if(s==0&&B%2==0) cnt--;
			//cout<<k<<" "<<cnt<<" "<<w.v<<endl;
			ret+=fac[k]*tw[cnt]*w;
		}
	}
	cout<<ret.v<<endl;
}
int main(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	cout<<fixed<<setprecision(20);
	int T=1;
	while(T--) solve();
}

这程序好像有点Bug,我给组数据试试?

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3468kb

input:

2 1 2

output:

1

result:

ok 1 number(s): "1"

Test #2:

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

input:

8 4 2

output:

6

result:

ok 1 number(s): "6"

Test #3:

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

input:

29 7 154

output:

0

result:

ok 1 number(s): "0"

Test #4:

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

input:

50 10 10

output:

77225400

result:

ok 1 number(s): "77225400"

Test #5:

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

input:

50 9 10

output:

11362680

result:

ok 1 number(s): "11362680"

Test #6:

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

input:

2 1 1

output:

0

result:

ok 1 number(s): "0"

Test #7:

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

input:

20 6 15

output:

0

result:

ok 1 number(s): "0"

Test #8:

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

input:

31 7 62

output:

0

result:

ok 1 number(s): "0"

Test #9:

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

input:

1 1 1

output:

1

result:

ok 1 number(s): "1"

Test #10:

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

input:

1 1 1000000000000

output:

1

result:

ok 1 number(s): "1"

Test #11:

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

input:

1000000 1414 999999999292

output:

626239238

result:

ok 1 number(s): "626239238"

Test #12:

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

input:

1000000 1413 999999999292

output:

804023673

result:

ok 1 number(s): "804023673"

Test #13:

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

input:

637704 1129 999999999368

output:

376288586

result:

ok 1 number(s): "376288586"

Test #14:

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

input:

777711 1246 999999999893

output:

315967293

result:

ok 1 number(s): "315967293"

Test #15:

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

input:

738077 1215 999999999405

output:

481429116

result:

ok 1 number(s): "481429116"

Test #16:

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

input:

878084 1324 999999999825

output:

85615210

result:

ok 1 number(s): "85615210"

Test #17:

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

input:

879744 1326 999999998712

output:

826681339

result:

ok 1 number(s): "826681339"

Test #18:

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

input:

519750 1019 999999999120

output:

380025867

result:

ok 1 number(s): "380025867"

Test #19:

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

input:

521410 1021 999999999509

output:

43307492

result:

ok 1 number(s): "43307492"

Test #20:

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

input:

578829 1075 999999999204

output:

847975635

result:

ok 1 number(s): "847975635"

Test #21:

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

input:

580490 1077 3

output:

0

result:

ok 1 number(s): "0"

Test #22:

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

input:

720496 1199 240

output:

0

result:

ok 1 number(s): "0"

Test #23:

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

input:

722157 1202 601

output:

952370308

result:

ok 1 number(s): "952370308"

Test #24:

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

input:

862163 1312 1313

output:

626393445

result:

ok 1 number(s): "626393445"

Test #25:

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

input:

822530 1283 1

output:

0

result:

ok 1 number(s): "0"

Test #26:

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

input:

962536 1386 1

output:

0

result:

ok 1 number(s): "0"

Test #27:

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

input:

1000000 1412 999999999292

output:

0

result:

ok 1 number(s): "0"

Test #28:

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

input:

1000000000 44721 999999975339

output:

510734471

result:

ok 1 number(s): "510734471"

Test #29:

score: 0
Accepted
time: 10ms
memory: 3572kb

input:

1000000000 44720 999999975339

output:

848193647

result:

ok 1 number(s): "848193647"

Test #30:

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

input:

842907373 41059 999999992564

output:

372008876

result:

ok 1 number(s): "372008876"

Test #31:

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

input:

509306715 31915 999999995252

output:

449159217

result:

ok 1 number(s): "449159217"

Test #32:

score: 0
Accepted
time: 8ms
memory: 3504kb

input:

724371023 38062 999999995226

output:

184015087

result:

ok 1 number(s): "184015087"

Test #33:

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

input:

890770366 42207 999999997728

output:

181797941

result:

ok 1 number(s): "181797941"

Test #34:

score: 0
Accepted
time: 10ms
memory: 3552kb

input:

900801961 42445 999999997945

output:

723246071

result:

ok 1 number(s): "723246071"

Test #35:

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

input:

567201303 33680 999999971049

output:

976667605

result:

ok 1 number(s): "976667605"

Test #36:

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

input:

782265611 39554 999999995722

output:

382214761

result:

ok 1 number(s): "382214761"

Test #37:

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

input:

743632241 38564 999999975555

output:

622113251

result:

ok 1 number(s): "622113251"

Test #38:

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

input:

753663836 38824 2

output:

0

result:

ok 1 number(s): "0"

Test #39:

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

input:

920063179 42896 181

output:

0

result:

ok 1 number(s): "0"

Test #40:

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

input:

635127486 35641 29

output:

0

result:

ok 1 number(s): "0"

Test #41:

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

input:

801526829 40037 40038

output:

966008245

result:

ok 1 number(s): "966008245"

Test #42:

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

input:

811558424 40288 4

output:

0

result:

ok 1 number(s): "0"

Test #43:

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

input:

977957767 44225 1134

output:

0

result:

ok 1 number(s): "0"

Test #44:

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

input:

1000000000 44719 999999975339

output:

0

result:

ok 1 number(s): "0"

Test #45:

score: 0
Accepted
time: 279ms
memory: 19556kb

input:

1000000000000 1414214 999999204684

output:

486279705

result:

ok 1 number(s): "486279705"

Test #46:

score: 0
Accepted
time: 279ms
memory: 19712kb

input:

1000000000000 1414213 999999204684

output:

480189439

result:

ok 1 number(s): "480189439"

Test #47:

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

input:

815496560693 811750096047 999999745266

output:

0

result:

ok 1 number(s): "0"

Test #48:

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

input:

582297122576 579821664123 999999766452

output:

0

result:

ok 1 number(s): "0"

Test #49:

score: 0
Accepted
time: 211ms
memory: 15500kb

input:

554379675168 1052976 999999724464

output:

850999094

result:

ok 1 number(s): "850999094"

Test #50:

score: 0
Accepted
time: 258ms
memory: 18032kb

input:

825475204348 1284892 999998814682

output:

718965161

result:

ok 1 number(s): "718965161"

Test #51:

score: 0
Accepted
time: 255ms
memory: 17960kb

input:

801852724236 1266375 999999350625

output:

266617066

result:

ok 1 number(s): "266617066"

Test #52:

score: 0
Accepted
time: 216ms
memory: 15420kb

input:

568653286119 1066445 999998949078

output:

268095321

result:

ok 1 number(s): "268095321"

Test #53:

score: 0
Accepted
time: 206ms
memory: 15156kb

input:

540735838711 1039938 999999181110

output:

955131707

result:

ok 1 number(s): "955131707"

Test #54:

score: 0
Accepted
time: 263ms
memory: 18024kb

input:

807536400595 1270854 999998944705

output:

83358005

result:

ok 1 number(s): "83358005"

Test #55:

score: 0
Accepted
time: 253ms
memory: 17712kb

input:

779618953187 1248694 624347

output:

695027909

result:

ok 1 number(s): "695027909"

Test #56:

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

input:

546419515070 1045388 1

output:

0

result:

ok 1 number(s): "0"

Test #57:

score: 0
Accepted
time: 205ms
memory: 15184kb

input:

527092002255 1026735 342245

output:

168868859

result:

ok 1 number(s): "168868859"

Test #58:

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

input:

793892564138 1260072 1

output:

0

result:

ok 1 number(s): "0"

Test #59:

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

input:

765975116731 1237720 44

output:

0

result:

ok 1 number(s): "0"

Test #60:

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

input:

532775678613 1032254 11865

output:

0

result:

ok 1 number(s): "0"

Test #61:

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

input:

1000000000000 1414212 999999204684

output:

0

result:

ok 1 number(s): "0"

Extra Test:

score: 0
Extra Test Passed