QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#773117 | #7746. Go go Baron Bunny! | Crysfly | AC ✓ | 47ms | 65868kb | C++14 | 3.7kb | 2024-11-23 01:08:30 | 2024-11-23 01:08:31 |
Judging History
answer
// what is matter? never mind.
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,sse4,popcnt,abm,mmx,avx,avx2")
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
#define ll long long
#define ull unsigned long long
#define int long long
using namespace std;
inline int read()
{
char c=getchar();int x=0;bool f=0;
for(;!isdigit(c);c=getchar())f^=!(c^45);
for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
if(f)x=-x;return x;
}
#define mod 998244353
struct modint{
int x;
modint(int o=0){x=o;}
modint &operator = (int o){return x=o,*this;}
modint &operator +=(modint o){return x=x+o.x>=mod?x+o.x-mod:x+o.x,*this;}
modint &operator -=(modint o){return x=x-o.x<0?x-o.x+mod:x-o.x,*this;}
modint &operator *=(modint o){return x=1ll*x*o.x%mod,*this;}
modint &operator ^=(int b){
modint a=*this,c=1;
for(;b;b>>=1,a*=a)if(b&1)c*=a;
return x=c.x,*this;
}
modint &operator /=(modint o){return *this *=o^=mod-2;}
friend modint operator +(modint a,modint b){return a+=b;}
friend modint operator -(modint a,modint b){return a-=b;}
friend modint operator *(modint a,modint b){return a*=b;}
friend modint operator /(modint a,modint b){return a/=b;}
friend modint operator ^(modint a,int b){return a^=b;}
friend bool operator ==(modint a,int b){return a.x==b;}
friend bool operator !=(modint a,int b){return a.x!=b;}
bool operator ! () {return !x;}
modint operator - () {return x?mod-x:0;}
bool operator <(const modint&b)const{return x<b.x;}
};
inline modint qpow(modint x,int y){return x^y;}
vector<modint> fac,ifac,iv;
inline void initC(int n)
{
if(iv.empty())fac=ifac=iv=vector<modint>(2,1);
int m=iv.size(); ++n;
if(m>=n)return;
iv.resize(n),fac.resize(n),ifac.resize(n);
For(i,m,n-1){
iv[i]=iv[mod%i]*(mod-mod/i);
fac[i]=fac[i-1]*i,ifac[i]=ifac[i-1]*iv[i];
}
}
inline modint C(int n,int m){
if(m<0||n<m)return 0;
return initC(n),fac[n]*ifac[m]*ifac[n-m];
}
inline modint sign(int n){return (n&1)?(mod-1):(1);}
#define fi first
#define se second
#define pb push_back
#define mkp make_pair
typedef pair<int,int>pii;
typedef vector<int>vi;
#define maxn 2000005
#define inf 0x3f3f3f3f
int n,k,t;
modint pw[maxn];
void solve(int n,int s,int op)
{
// t : cir
// n/t : duanshu
cerr<<"solve "<<n<<" "<<s<<" "<<t<<" "<<op<<"\n";
if(s%(n/t)!=0){
puts("0");
exit(0);
}
if(t==1){
puts("0");
exit(0);
}
s/=(n/t);
int s0=t-s;
int s1=s;
// cout<<"s0,s1 "<<s0<<" "<<s1<<"\n";
modint res=0;
if(op==1){
For(i,1,s0){
modint tmp=(C(s1-1,i)+C(s1-1,i-1));
tmp*=C(s0-1,i-1);
res+=tmp*pw[i*(n/t)];
}
// res=C(t-1,s0)*qpow((mod+1)/2,s0*(n/t));
res*=fac[n];
}else{
// res+=C(t-2,s0-2)*qpow((mod+1)/2,s*(n/t));
// res+=C(t-1,s0-1)*qpow((mod+1)/2,s*(n/t)-1);
// 0xxxx0
For(i,2,s0){
modint tmp=C(s0-1,i-1)*C(s1-1,i-2);
res+=tmp*pw[(i-1)*(n/t)];
}
// 0xxxx1
For(i,1,s0){
modint tmp=C(s0-1,i-1)*C(s1-1,i-1);
// cout<<"i: "<<i<<" "<<tmp.x<<"\n";
res+=tmp*pw[i*(n/t)-1];
}
res*=fac[n-1];
}
cout<<res.x;
}
signed main()
{
n=read(),k=read(),t=read();
pw[0]=1;
For(i,1,2000000) pw[i]=pw[i-1]*((mod+1)/2);
initC(2e6);
int tlen=0;
For(i,1,2000000){
if(1ll*i*(i+1)/2==n){
if(i==k)cout<<fac[k].x;
else cout<<0;
exit(0);
}
if(1ll*i*(i+1)/2>n){
tlen=i;
if(tlen!=k && tlen!=k+1){
puts("0");
exit(0);
}
break;
}
}
t%=tlen;
t=__gcd(t,tlen);
int sum=n-1ll*tlen*(tlen-1)/2;
if(tlen==k) solve(tlen,sum,1);
if(tlen==k+1) solve(tlen,sum,0);
return 0;
}
/*
*/
这程序好像有点Bug,我给组数据试试?
详细
Test #1:
score: 100
Accepted
time: 27ms
memory: 65672kb
input:
2 1 2
output:
1
result:
ok 1 number(s): "1"
Test #2:
score: 0
Accepted
time: 29ms
memory: 65608kb
input:
8 4 2
output:
6
result:
ok 1 number(s): "6"
Test #3:
score: 0
Accepted
time: 34ms
memory: 65664kb
input:
29 7 154
output:
0
result:
ok 1 number(s): "0"
Test #4:
score: 0
Accepted
time: 29ms
memory: 65592kb
input:
50 10 10
output:
77225400
result:
ok 1 number(s): "77225400"
Test #5:
score: 0
Accepted
time: 26ms
memory: 65640kb
input:
50 9 10
output:
11362680
result:
ok 1 number(s): "11362680"
Test #6:
score: 0
Accepted
time: 32ms
memory: 65868kb
input:
2 1 1
output:
0
result:
ok 1 number(s): "0"
Test #7:
score: 0
Accepted
time: 23ms
memory: 65676kb
input:
20 6 15
output:
0
result:
ok 1 number(s): "0"
Test #8:
score: 0
Accepted
time: 29ms
memory: 65580kb
input:
31 7 62
output:
0
result:
ok 1 number(s): "0"
Test #9:
score: 0
Accepted
time: 31ms
memory: 65796kb
input:
1 1 1
output:
1
result:
ok 1 number(s): "1"
Test #10:
score: 0
Accepted
time: 29ms
memory: 65780kb
input:
1 1 1000000000000
output:
1
result:
ok 1 number(s): "1"
Test #11:
score: 0
Accepted
time: 26ms
memory: 65696kb
input:
1000000 1414 999999999292
output:
626239238
result:
ok 1 number(s): "626239238"
Test #12:
score: 0
Accepted
time: 23ms
memory: 65804kb
input:
1000000 1413 999999999292
output:
804023673
result:
ok 1 number(s): "804023673"
Test #13:
score: 0
Accepted
time: 26ms
memory: 65636kb
input:
637704 1129 999999999368
output:
376288586
result:
ok 1 number(s): "376288586"
Test #14:
score: 0
Accepted
time: 27ms
memory: 65704kb
input:
777711 1246 999999999893
output:
315967293
result:
ok 1 number(s): "315967293"
Test #15:
score: 0
Accepted
time: 29ms
memory: 65708kb
input:
738077 1215 999999999405
output:
481429116
result:
ok 1 number(s): "481429116"
Test #16:
score: 0
Accepted
time: 30ms
memory: 65740kb
input:
878084 1324 999999999825
output:
85615210
result:
ok 1 number(s): "85615210"
Test #17:
score: 0
Accepted
time: 35ms
memory: 65720kb
input:
879744 1326 999999998712
output:
826681339
result:
ok 1 number(s): "826681339"
Test #18:
score: 0
Accepted
time: 30ms
memory: 65716kb
input:
519750 1019 999999999120
output:
380025867
result:
ok 1 number(s): "380025867"
Test #19:
score: 0
Accepted
time: 23ms
memory: 65688kb
input:
521410 1021 999999999509
output:
43307492
result:
ok 1 number(s): "43307492"
Test #20:
score: 0
Accepted
time: 34ms
memory: 65784kb
input:
578829 1075 999999999204
output:
847975635
result:
ok 1 number(s): "847975635"
Test #21:
score: 0
Accepted
time: 27ms
memory: 65728kb
input:
580490 1077 3
output:
0
result:
ok 1 number(s): "0"
Test #22:
score: 0
Accepted
time: 28ms
memory: 65848kb
input:
720496 1199 240
output:
0
result:
ok 1 number(s): "0"
Test #23:
score: 0
Accepted
time: 25ms
memory: 65636kb
input:
722157 1202 601
output:
952370308
result:
ok 1 number(s): "952370308"
Test #24:
score: 0
Accepted
time: 30ms
memory: 65700kb
input:
862163 1312 1313
output:
626393445
result:
ok 1 number(s): "626393445"
Test #25:
score: 0
Accepted
time: 25ms
memory: 65728kb
input:
822530 1283 1
output:
0
result:
ok 1 number(s): "0"
Test #26:
score: 0
Accepted
time: 26ms
memory: 65668kb
input:
962536 1386 1
output:
0
result:
ok 1 number(s): "0"
Test #27:
score: 0
Accepted
time: 29ms
memory: 65576kb
input:
1000000 1412 999999999292
output:
0
result:
ok 1 number(s): "0"
Test #28:
score: 0
Accepted
time: 26ms
memory: 65736kb
input:
1000000000 44721 999999975339
output:
510734471
result:
ok 1 number(s): "510734471"
Test #29:
score: 0
Accepted
time: 37ms
memory: 65736kb
input:
1000000000 44720 999999975339
output:
848193647
result:
ok 1 number(s): "848193647"
Test #30:
score: 0
Accepted
time: 22ms
memory: 65796kb
input:
842907373 41059 999999992564
output:
372008876
result:
ok 1 number(s): "372008876"
Test #31:
score: 0
Accepted
time: 34ms
memory: 65716kb
input:
509306715 31915 999999995252
output:
449159217
result:
ok 1 number(s): "449159217"
Test #32:
score: 0
Accepted
time: 33ms
memory: 65648kb
input:
724371023 38062 999999995226
output:
184015087
result:
ok 1 number(s): "184015087"
Test #33:
score: 0
Accepted
time: 34ms
memory: 65844kb
input:
890770366 42207 999999997728
output:
181797941
result:
ok 1 number(s): "181797941"
Test #34:
score: 0
Accepted
time: 30ms
memory: 65800kb
input:
900801961 42445 999999997945
output:
723246071
result:
ok 1 number(s): "723246071"
Test #35:
score: 0
Accepted
time: 34ms
memory: 65632kb
input:
567201303 33680 999999971049
output:
976667605
result:
ok 1 number(s): "976667605"
Test #36:
score: 0
Accepted
time: 26ms
memory: 65692kb
input:
782265611 39554 999999995722
output:
382214761
result:
ok 1 number(s): "382214761"
Test #37:
score: 0
Accepted
time: 25ms
memory: 65740kb
input:
743632241 38564 999999975555
output:
622113251
result:
ok 1 number(s): "622113251"
Test #38:
score: 0
Accepted
time: 26ms
memory: 65804kb
input:
753663836 38824 2
output:
0
result:
ok 1 number(s): "0"
Test #39:
score: 0
Accepted
time: 34ms
memory: 65620kb
input:
920063179 42896 181
output:
0
result:
ok 1 number(s): "0"
Test #40:
score: 0
Accepted
time: 19ms
memory: 65732kb
input:
635127486 35641 29
output:
0
result:
ok 1 number(s): "0"
Test #41:
score: 0
Accepted
time: 35ms
memory: 65632kb
input:
801526829 40037 40038
output:
966008245
result:
ok 1 number(s): "966008245"
Test #42:
score: 0
Accepted
time: 31ms
memory: 65628kb
input:
811558424 40288 4
output:
0
result:
ok 1 number(s): "0"
Test #43:
score: 0
Accepted
time: 36ms
memory: 65636kb
input:
977957767 44225 1134
output:
0
result:
ok 1 number(s): "0"
Test #44:
score: 0
Accepted
time: 24ms
memory: 65672kb
input:
1000000000 44719 999999975339
output:
0
result:
ok 1 number(s): "0"
Test #45:
score: 0
Accepted
time: 43ms
memory: 65576kb
input:
1000000000000 1414214 999999204684
output:
486279705
result:
ok 1 number(s): "486279705"
Test #46:
score: 0
Accepted
time: 47ms
memory: 65652kb
input:
1000000000000 1414213 999999204684
output:
480189439
result:
ok 1 number(s): "480189439"
Test #47:
score: 0
Accepted
time: 27ms
memory: 65732kb
input:
815496560693 811750096047 999999745266
output:
0
result:
ok 1 number(s): "0"
Test #48:
score: 0
Accepted
time: 34ms
memory: 65736kb
input:
582297122576 579821664123 999999766452
output:
0
result:
ok 1 number(s): "0"
Test #49:
score: 0
Accepted
time: 27ms
memory: 65700kb
input:
554379675168 1052976 999999724464
output:
850999094
result:
ok 1 number(s): "850999094"
Test #50:
score: 0
Accepted
time: 40ms
memory: 65768kb
input:
825475204348 1284892 999998814682
output:
718965161
result:
ok 1 number(s): "718965161"
Test #51:
score: 0
Accepted
time: 35ms
memory: 65804kb
input:
801852724236 1266375 999999350625
output:
266617066
result:
ok 1 number(s): "266617066"
Test #52:
score: 0
Accepted
time: 35ms
memory: 65672kb
input:
568653286119 1066445 999998949078
output:
268095321
result:
ok 1 number(s): "268095321"
Test #53:
score: 0
Accepted
time: 28ms
memory: 65780kb
input:
540735838711 1039938 999999181110
output:
955131707
result:
ok 1 number(s): "955131707"
Test #54:
score: 0
Accepted
time: 44ms
memory: 65656kb
input:
807536400595 1270854 999998944705
output:
83358005
result:
ok 1 number(s): "83358005"
Test #55:
score: 0
Accepted
time: 29ms
memory: 65656kb
input:
779618953187 1248694 624347
output:
695027909
result:
ok 1 number(s): "695027909"
Test #56:
score: 0
Accepted
time: 34ms
memory: 65704kb
input:
546419515070 1045388 1
output:
0
result:
ok 1 number(s): "0"
Test #57:
score: 0
Accepted
time: 33ms
memory: 65736kb
input:
527092002255 1026735 342245
output:
168868859
result:
ok 1 number(s): "168868859"
Test #58:
score: 0
Accepted
time: 27ms
memory: 65780kb
input:
793892564138 1260072 1
output:
0
result:
ok 1 number(s): "0"
Test #59:
score: 0
Accepted
time: 31ms
memory: 65716kb
input:
765975116731 1237720 44
output:
0
result:
ok 1 number(s): "0"
Test #60:
score: 0
Accepted
time: 25ms
memory: 65736kb
input:
532775678613 1032254 11865
output:
0
result:
ok 1 number(s): "0"
Test #61:
score: 0
Accepted
time: 34ms
memory: 65800kb
input:
1000000000000 1414212 999999204684
output:
0
result:
ok 1 number(s): "0"
Extra Test:
score: 0
Extra Test Passed