提出 #70077533
ソースコード 拡げる
// 华风夏韵 洛水天依
// 天依宝宝可爱!> <
#include<bits/stdc++.h>
#define int long long
#define double long double
#define il inline
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define rpe(i,a,b) for(int i=(a);i>=(b);--i)
#define repp(i,a,b,c) for(int i=(a);i<=(b);i+=(c))
#define rpee(i,a,b,c) for(int i=(a);i>=(b);i-=(c))
#define inf (int)(0x3f3f3f3f3f3f3f3f)
#define pii pair <int,int>
#define st first
#define nd second
#define mp make_pair
#define pb emplace_back
#define all(x) (x).begin(),(x).end()
#define mxele *max_element
#define mnele *min_element
#define gsum(l,r) accumulate((l),(r),0ll)
#define umap unordered_map
#define uset unordered_set
#define prque(a,b) priority_queue <a,vector<a>,b<a>>
#define popc __builtin_popcount
#define lowb lower_bound
#define uppb upper_bound
using namespace std;
bool memory_begin;
#ifdef ONLINE_JUDGE
#define is_debug 0
#else
#define is_debug 1
#endif
#define multiple_test 0
namespace fast_io{char buf[1<<12],*p1=buf,*p2=buf,sr[1<<23],z[23],nc;int C=-1,Z=0,Bi=0,ny,precision=19;bool isEOF=0;unsigned long long pw10[20];il bool init_pw10(){pw10[0]=1ull;rep(i,1,19)pw10[i]=pw10[i-1]*10ull;return 1;}il char gc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<12,stdin),p1==p2)?EOF:*p1++;}il int read(){int x=0;ny=1;while(nc=gc(),(nc<48||nc>57)&&nc^EOF)nc==45&&(ny=-1);Bi=1;if(nc<0)return isEOF=1,nc;x=nc-48;while(nc=gc(),47<nc&&nc<58&&nc^EOF)x=(x<<3)+(x<<1)+(nc^48),++Bi;return x*ny;}il void read(int &x){x=read();}il void read(char &x){while(nc=gc(),nc<33&&nc^EOF);nc<0&&(isEOF=1);x=nc;}il void read(pii&a){a.st=read(),a.nd=read();}il void read(double &x){pw10[0]||init_pw10();int a=read(),y=ny,b=(nc!='.')?0:read();x=(b?a+(double)b/pw10[Bi]*y:a);}il void read(string &s){s="";while(nc=gc(),nc<33&&nc^EOF);nc<0&&(isEOF=1);s+=nc;while(nc=gc(),nc>=33)s+=nc;}il signed read(char *s){char *t=s;while(nc=gc(),nc<33&&nc^EOF);nc<0&&(isEOF=1);*s++=nc;while(nc=gc(),nc>=33)*s++=nc;return s-t;}template <typename T,typename ... Args> il void read(T &x, Args &... y) {read(x);read(y...);}il void ot(){fwrite(sr,1,C+1,stdout);C=-1;}il void flush(){if(C>1<<22)ot();}il void pc(char c){sr[++C]=c;flush();}il void write(int x,char t='\0'){int y=0;if(x<0)y=1,x=-x;while(z[++Z]=x%10+48,x/=10);if(y)z[++Z]='-';while(sr[++C]=z[Z],--Z);t=='\0'||(sr[++C]=t);flush();}il void write(char x,char t='\0'){sr[++C]=x,t=='\0'||(sr[++C]=t);flush();}il void write(pii a,char t='\0'){write(a.st,' '),write(a.nd,t);flush();}il void write(double x,char t='\0'){pw10[0]||init_pw10();write((int)x,'.'),write((int)((x-(int)x)*pw10[precision]),t);flush();}il void write(string s,char t='\0'){int l=s.size();rep(i,0,l-1)sr[++C]=s[i];t=='\0'||(sr[++C]=t);flush();}il void write(char *s,char t='\0'){int l=strlen(s);rep(i,0,l-1)sr[++C]=*s++;t=='\0'||(sr[++C]=t);flush();}template <typename T,typename ... Args> il void write(T x, Args ... y){write(x,' ');write(y...);}}
using fast_io::read,fast_io::write;
namespace _{template <typename T> il void r(T*a,int n){rep(i,1,n)read(a[i]);}template <typename T1,typename T2> il void r(T1 *a,T2 *b,int n){rep(i,1,n)read(a[i]),read(b[i]);}template <typename T1,typename T2,typename T3> il void r(T1 *a,T2 *b,T3 *c,int n){rep(i,1,n)read(a[i]),read(b[i]),read(c[i]);}template <typename T> il void r(T*a,int n,int m){rep(i,1,n)rep(j,1,m)read(a[i][j]);}template <typename T> il void r(vector<T>&a,int n){a.resize(n);rep(i,0,n-1)read(a[i]);}template <typename T> il void r(vector<T>*p,int m,bool op){int u,v;rep(i,1,m)read(u,v),p[u].pb(v),op||(p[v].pb(u),1);}template <typename T1,typename T2> il void r(vector<pair<T1,T2>>*p,int m,bool op){int u,v,w;rep(i,1,m)read(u,v,w),p[u].pb(v,w),op||(p[v].pb(u,w),1);}template <typename T> il void w(T*a,int n){rep(i,1,n-1)write(a[i],' ');n&&(write(a[n]),1),write('\n');}template <typename T> il void w(T*a,int n,int m){rep(i,1,n){rep(j,1,m-1)write(a[i][j],' ');m&&(write(a[i][m]),1),write('\n');}}template <typename T> il void w(vector<T>&a){rep(i,0,(int)a.size()-2)write(a[i],' ');!a.empty()&&(write(a.back()),1),write('\n');}}
namespace dbg{template <typename T> il void arr(T*a,int n){if(!is_debug)return;rep(i,1,n-1)cerr<<a[i]<<' ';n&&(cerr<<a[n],1),cerr<<'\n';} template <typename T> il void arr(string s,T *a,int n){if(!is_debug)return;cerr<<s<<" : ";arr(a,n);}template <typename T> il void mat(T*a,int n,int m){if(!is_debug)return;rep(i,1,n){rep(j,1,m-1)cerr<<a[i][j]<<' ';m&&(cerr<<a[i][m],1),cerr<<'\n';}cerr<<'\n';} template <typename T> il void mat(string s,T *a,int n,int m){if(!is_debug)return;cerr<<s<<" :\n";mat(a,n,m);}template <typename T> il void vec(vector<T>a){if(!is_debug)return;rep(i,0,(int)a.size()-2)cerr<<a[i]<<' ';!a.empty()&&(cerr<<a.back(),1),cerr<<'\n';} template <typename T> il void vec(string s,vector <T> a){if(!is_debug)return;cerr<<s<<" : ";vec(a);}template <typename T> il void graV(vector<T>*p,int n){if(!is_debug)return;rep(u,1,n){cerr<<u<<" : ";rep(i,0,(int)p[u].size()-2)cerr<<p[u][i]<<' ';!p[u].empty()&&(cerr<<p[u].back(),1),cerr<<'\n';}cerr<<'\n';} template <typename T> il void graV(string s,vector <T> *p,int n){if(!is_debug)return;cerr<<s<<" :\n";graV(p,n);}template <typename T1,typename T2> il void graV(vector<pair<T1,T2>>*p,int n){if(!is_debug)return;rep(u,1,n){cerr<<u<<" : ";rep(i,0,(int)p[u].size()-2)cerr<<p[u][i].st<<','<<p[u][i].nd<<' ';!p[u].empty()&&(cerr<<p[u].back().st<<','<<p[u].back().nd,1),cerr<<'\n';}cerr<<'\n';} template <typename T1,typename T2> il void graV(string s,vector <pair<T1,T2>> *p,int n){if(!is_debug)return;cerr<<s<<" :\n";graV(p,n);}template <typename T> il void graE(vector<T>*p,int n,bool op){if(!is_debug)return;rep(u,1,n)for(auto v:p[u])(op||u<v)&&(cerr<<u<<' '<<v<<'\n',1);cerr<<'\n';} template <typename T> il void graE(string s,vector <T> *p,int n,bool op){if(!is_debug)return;cerr<<s<<" :\n";graE(p,n,op);}template <typename T1,typename T2> il void graE(vector<pair<T1,T2>>*p,int n,bool op){if(!is_debug)return;rep(u,1,n)for(auto [v,w]:p[u])(op||u<v)&&(cerr<<u<<' '<<v<<' '<<w<<'\n',1);cerr<<'\n';} template <typename T1,typename T2> il void graE(string s,vector <pair<T1,T2>> *p,int n,bool op){if(!is_debug)return;cerr<<s<<" :\n";graE(p,n,op);}}
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
il double gtime(){return clock()*1e3/CLOCKS_PER_SEC;}
template <typename T> il void clr(T &x){T().swap(x);}
template <typename T1,typename T2> il T1& chmax(T1 &a,T2 b){return a<b&&(a=b,1),a;}
template <typename T1,typename T2> il T1& chmin(T1 &a,T2 b){return a>b&&(a=b,1),a;}
signed __k; unsigned long long __mu; long long mod;
il void init_mod_(long long p){mod=p,__k=63+__lg(mod)+(mod&mod-1!=0),__mu=((__uint128_t(1)<<__k)-1)/mod;}
il long long mod_(long long x){unsigned long long ux=(x>=0?x:-x),r=ux-(__uint128_t(ux)*__mu>>__k)*mod; return x>=0||!r?r:mod-r;}
template <typename T1,typename T2> il T1& add(T1 &a,T2 b){(a+=b)>=0?(a>=mod&&(a-=mod)):(a+=mod);return a;}
#if !is_debug
#define fprintf(...) (1)
struct __null_stream{template<typename T>__null_stream& operator<<(const T&){return *this;}};
static __null_stream null_stream;
#define cerr null_stream
#endif
const int N=400+5,M=6e5+5,V=1000+5,MOD=998244353;
const int dx[10]={0,0,1,0,-1,1,1,-1,-1},dy[10]={0,1,0,-1,0,1,-1,1,-1};
const double eps=1e-9;
int __T=1,test_case;
class mint
{
private:
int val;
static il void exgcd(int a,int b,int &x,int &y){b ? (exgcd(b,a%b,y,x),y-=a/b*x) : (x=1,y=0);}
public:
il mint(int x=0):val(mod_(x)){val<0&&(val+=mod);}
il explicit operator int()const{return val;}
il friend bool operator==(const mint& lhs,const mint& rhs){return !(lhs.val^rhs.val);}
il friend bool operator!=(const mint& lhs,const mint& rhs){return lhs.val^rhs.val;}
il friend bool operator>(const mint& lhs,const mint& rhs){return lhs.val>rhs.val;}
il friend bool operator<(const mint& lhs,const mint& rhs){return lhs.val<rhs.val;}
il friend bool operator>=(const mint& lhs,const mint& rhs){return lhs.val>=rhs.val;}
il friend bool operator<=(const mint& lhs,const mint& rhs){return lhs.val<=rhs.val;}
il mint operator-()const{return mint(-val);}
il bool operator!()const{return !val;}
il mint& operator+=(const mint& rhs){return val+=rhs.val,val>=mod&&(val-=mod),*this;}
il mint& operator-=(const mint& rhs){return val-=rhs.val,val<0&&(val+=mod),*this;}
il mint& operator*=(const mint& rhs){return val=mod_(1ll*val*rhs.val),*this;}
il mint& operator/=(const mint& rhs){return *this*=rhs.inv();}
il friend mint operator+(mint lhs,const mint& rhs){return lhs+=rhs;}
il friend mint operator-(mint lhs,const mint& rhs){return lhs-=rhs;}
il friend mint operator*(mint lhs,const mint& rhs){return lhs*=rhs;}
il friend mint operator/(mint lhs,const mint& rhs){return lhs/=rhs;}
il mint& operator++(){return ++val,*this;}
il mint operator++(signed){mint tmp(*this);++*this;return tmp;}
il mint& operator--(){return --val,*this;}
il mint operator--(signed){mint tmp(*this);--*this;return tmp;}
il mint operator~(){return mint(~val);}
il mint& operator&=(const mint& rhs){return val&=rhs.val,val>=mod&&(val-=mod),*this;}
il mint& operator|=(const mint& rhs){return val|=rhs.val,*this;}
il mint& operator^=(const mint& rhs){return val^=rhs.val,val>=mod&&(val-=mod),*this;}
il mint& operator<<=(const int& rhs){return val<<=rhs,val=mod_(val),*this;}
il mint& operator>>=(const int& rhs){return val>>=rhs,*this;}
il friend mint operator&(mint lhs,const mint& rhs){return lhs&=rhs;}
il friend mint operator|(mint lhs,const mint& rhs){return lhs|=rhs;}
il friend mint operator^(mint lhs,const mint& rhs){return lhs^=rhs;}
il friend mint operator<<(mint lhs,const int& rhs){return lhs<<=rhs;}
il friend mint operator>>(mint lhs,const int& rhs){return lhs>>=rhs;}
il mint inv()const;
il friend std::ostream& operator<<(std::ostream &os,const mint &m){return os<<m.val;}
il friend std::istream& operator>>(std::istream &is,mint &m){int x;is>>x;m=mint(x);return is;}
};
namespace math
{
mint inv[V],fac[V],finv[V];
il void init_inv(int n=V-1) {inv[0]=inv[1]=finv[0]=finv[1]=fac[0]=fac[1]=1; rep(i,2,n) inv[i]=(mod-mod/i)*inv[mod%i],finv[i]=inv[i]; rep(i,2,n) fac[i]=fac[i-1]*i,finv[i]=finv[i-1]*finv[i];}
il mint fact(int n) {if(n<0) return 0; if(n<V) return !fac[0] && (init_inv(),1),fac[n]; mint ans=1; rep(i,2,n) ans*=i; return ans;}
il mint A(int n,int m) {!finv[0] && (init_inv(),1); return n<m||m<0 ? 0 : fac[n]*finv[n-m];}
il mint C(int n,int m) {!finv[0] && (init_inv(),1); return n<m||m<0 ? 0 : fac[n]*finv[m]*finv[n-m];}
il void exgcd(int a,int b,int &x,int &y) {b ? (exgcd(b,a%b,y,x),y-=a/b*x) : (x=1,y=0);}
il mint ginvA(int n,int m) {!finv[0] && (init_inv(),1); return n<m||m<0 ? 0 : finv[n]*fac[n-m];}
il mint ginvC(int n,int m) {!finv[0] && (init_inv(),1); return n<m||m<0 ? 0 : finv[n]*fac[m]*fac[n-m];}
template <typename T> il mint ginv(T _a) {int a=(int)_a; if(a<V && (int)inv[a]) return inv[a]; int x,k; exgcd(a,mod,x,k); return x;}
template <typename T1,typename T2> il mint fpow(T1 _a,T2 b) {if(_a==-1) b&1?-1:1; if(b<0) return ginv(fpow(_a,-b)); mint ans=1,a=_a; for(;b;b&1&&(ans*=a,1),b>>=1,a*=a); return ans;}
}
using namespace math;
il mint mint::inv()const{return math::ginv(val);}
// === / 走吧 就算我们无法让大雨停下 还有我 陪你在雨里放肆奔跑啊 / ===
int n,a[N],b[N];
mint f[2][N][N],pw[N];
il void solve(int __Ti)
{
// double time_begin=gtime();
read(n),_::r(a,b,n);
f[0][0][0]=-1;
bool fl=0; int sa=0,sb=0;
rep(i,1,n)
{
fl=!fl,sa+=a[i],sb+=b[i];
pw[0]=1; rep(j,1,b[i]) pw[j]=pw[j-1]*a[i];
rep(j,0,sa) rep(k,0,sb)
{
f[fl][j][k]=f[!fl][j][k];
if(j>=a[i]) rep(x,0,min(k,b[i]-1)) f[fl][j][k]-=pw[x]*finv[x]*f[!fl][j-a[i]][k-x];
}
}
mint ans=0;
rep(j,1,sa) rep(k,0,sb) ans+=fac[k]/fpow(j,k+1)*f[fl][j][k];
ans*=sa;
write((int)ans);
// cerr<<"task "<<__Ti<<" : time = "<<gtime()-time_begin<<" ms\n";
}
il void init()
{
init_mod_(MOD),init_inv();
// read(test_case);
}
bool memory_end;
signed main()
{
// freopen(".in","r",stdin),freopen(".out","w",stdout);
// ios::sync_with_stdio(0),cin.tie(nullptr),cout.tie(nullptr);
fprintf(stderr,"memory = %.3lf MB\n\n",abs(&memory_end-&memory_begin)/1048576.);
init(); multiple_test&&(read(__T),1);
rep(__Ti,1,__T) solve(__Ti);
// int __Ti=0; while(read(n),!fast_io::isEOF) solve(++__Ti);
fprintf(stderr,"\ntime = %.3Lf ms\n",gtime());
return fast_io::ot(),0;
}
提出情報
提出日時
2025-10-12 12:43:11+0900
問題
E - Gachapon
ユーザ
little__bug
言語
C++ 23 (gcc 12.2)
得点
1600
コード長
12551 Byte
結果
AC
実行時間
194 ms
メモリ
6244 KiB
コンパイルエラー
Main.cpp: In function ‘void init_mod_(long long int)’:
Main.cpp:53:65: warning: suggest parentheses around comparison in operand of ‘&’ [-Wparentheses]
53 | il void init_mod_(long long p){mod=p,__k=63+__lg(mod)+(mod&mod-1!=0),__mu=((__uint128_t(1)<<__k)-1)/mod;}
| ~~~~~^~~
Main.cpp: In function ‘void solve(long long int)’:
Main.cpp:143:19: warning: unused parameter ‘__Ti’ [-Wunused-parameter]
143 | il void solve(int __Ti)
| ^
Main.cpp: In function ‘int main()’:
Main.cpp:58:23: warning: statement has no effect [-Wunused-value]
58 | #define fprintf(...) (1)
| ~^~
Main.cpp:186:9: note: in expansion of macro ‘fprintf’
186 | fprintf(stderr,"memory = %.3lf MB\n\n",abs(&memory_end-&memory_begin)/1048576.);
| ^~~~~~~
Main.cpp:58:23: warning: statement has no effect [-Wunused-value]
58 | #define fprintf(...) (1)
| ~^~
Main.cpp:190:9: note: in expansion of macro ‘fprintf’
190 | fprintf(stderr,"\ntime = %.3Lf ms\n",gtime());
| ^~~~~~~
Main.cpp: In instantiation of ‘mint math::fpow(T1, T2) [with T1 = long long int; T2 = long long int]’:
Main.cpp:164:42: required from here
Main.cpp:133:81: warning: second operand of conditional expression has no effect [-Wunused-value]
133 | template <typename T1,typename T2> il mint fpow(T1 _a,T2 b) {if(_a==-1) b&1?-1:1; if(b<0) return ginv(fpow(_a,-b)); mint ans=1,a=_a; for(;b;b&1&&(ans*=a,1),b>>=1,a*=a); return ans;}
| ^
Main.cpp:133:81: warning: third operand of conditional expression has no effect [-Wunused-value]
Main.cpp: At global scope:
Main.cpp:60:22: warning: ‘null_stream’ defined but not used [-Wunused-variable]
60 | static __null_stream null_stream;
| ^~~~~~~~~~~
ジャッジ結果
セット名
Sample
All
得点 / 配点
0 / 0
1600 / 1600
結果
セット名
テストケース
Sample
sample-01.txt, sample-02.txt, sample-03.txt
All
01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, sample-01.txt, sample-02.txt, sample-03.txt
ケース名
結果
実行時間
メモリ
01-01.txt
AC
34 ms
6060 KiB
01-02.txt
AC
120 ms
6056 KiB
01-03.txt
AC
110 ms
6080 KiB
01-04.txt
AC
128 ms
6068 KiB
01-05.txt
AC
95 ms
6116 KiB
01-06.txt
AC
162 ms
6116 KiB
01-07.txt
AC
165 ms
6244 KiB
01-08.txt
AC
118 ms
6080 KiB
01-09.txt
AC
164 ms
6064 KiB
01-10.txt
AC
119 ms
5952 KiB
01-11.txt
AC
165 ms
6084 KiB
01-12.txt
AC
177 ms
6068 KiB
01-13.txt
AC
191 ms
6052 KiB
01-14.txt
AC
160 ms
6136 KiB
01-15.txt
AC
118 ms
6056 KiB
01-16.txt
AC
173 ms
6116 KiB
01-17.txt
AC
184 ms
6128 KiB
01-18.txt
AC
117 ms
6132 KiB
01-19.txt
AC
169 ms
6084 KiB
01-20.txt
AC
123 ms
6080 KiB
01-21.txt
AC
179 ms
6132 KiB
01-22.txt
AC
179 ms
6064 KiB
01-23.txt
AC
176 ms
6060 KiB
01-24.txt
AC
170 ms
6148 KiB
01-25.txt
AC
126 ms
6064 KiB
01-26.txt
AC
178 ms
5956 KiB
01-27.txt
AC
187 ms
6060 KiB
01-28.txt
AC
177 ms
6148 KiB
01-29.txt
AC
194 ms
6128 KiB
01-30.txt
AC
194 ms
6072 KiB
sample-01.txt
AC
2 ms
6236 KiB
sample-02.txt
AC
2 ms
6064 KiB
sample-03.txt
AC
160 ms
6128 KiB