Submission #39793938


Source Code Expand

#include <bits/stdc++.h>
using namespace std; 
using pii = pair<int,int>; using vi = vector<int>; using vp = vector<pii>; using ll = long long; 
using ull = unsigned long long; using db = double; using ld = long double; using lll = __int128_t;
template<typename T1, typename T2> T1 max(T1 a, T2 b) { return a > b ? a : b; }
template<typename T1, typename T2> T1 min(T1 a, T2 b) { return a < b ? a : b; }
#define multi int T; cin >> T; while ( T -- )
#define timer cerr << 1. * clock() / CLOCKS_PER_SEC << '\n';
#define iot ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
#define file(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
#define rep(i,s,t) for (register int i = (s), i##_ = (t) + 1; i < i##_; ++ i)
#define pre(i,s,t) for (register int i = (s), i##_ = (t) - 1; i > i##_; -- i)
#define eb emplace_back
#define pb pop_back
const int N = 1e6 + 10;
const int inf = 0x3f3f3f3f;
const ll infll = 0x3f3f3f3f3f3f3f3fll;

// int mod;
// const int mod = 10007;
// const int mod = 469762049, g = 3;
const int mod = 998244353; // const int g = 3;
// const int mod = 1004535809, g = 3;
// const int mod = 1e9 + 7;
// const int mod = 1e9 + 9;
// const int mod = 1e9 + 3579, bse = 131;
/* add / sub */ 			template<typename T1,typename T2>inline T1 add(T1 a,T2 b){return(a+=b)>=mod?a-mod:a;}template<typename T1,typename...Args>inline T1 add(T1 a,Args...b){return add(a,add(b...));}template<typename T1,typename T2>inline T1 sub(T1 a,T2 b){return(a-=b)<0?a+mod:a;}template<typename T1,typename...Args>inline T1 sub(T1 a,Args...b){return sub(a,add(b...));}template<typename T1,typename T2>inline void addi(T1&a,T2 b){(a+=b)>=mod?(a-=mod):true;}template<typename T1,typename...Args>inline void addi(T1&a,Args...b){addi(a,add(b...));}template<typename T1,typename T2>inline void subi(T1&a,T2 b){(a-=b)<0?(a+=mod):true;}template<typename T1,typename...Args>inline void subi(T1&a,Args...b){subi(a,add(b...));}
/* Fastmod / mul */ 		struct FastMod{int m;ll b;inline void init(int _m=1){m=_m;if(m==0)m=1;b=((lll)1<<64)/m;}FastMod(int _m=1){init(_m);}inline int operator()(ll a){ll q=((lll)a*b)>>64;a-=q*m;if(a>=m)a-=m;return a;}}Mod(mod);inline int mul(int a,int b){return Mod(1ll*a*b);}template<typename T1,typename T2>inline int mul(T1 a,T2 b){return Mod((long long)(1ll*a*b));}template<typename T,typename...Args>inline int mul(T a,Args...b){return mul(a,mul(b...));}template<typename T1,typename T2>inline void muli(T1&a,T2 b){a=Mod(1ll*a*b);}template<typename T1,typename...Args>inline void muli(T1&a,Args...b){muli(a,mul(b...));} // /* trivial multiple function(idk whether its useful*/ inline int mul(int a, int b) { return 1ll * a * b % mod; } template <typename T1, typename T2> inline int mul(T1 a, T2 b) { return (long long)(1ll * a * b) % mod; } template <typename T, typename ...Args> inline int mul(T a, Args ...b) { return mul(a, mul(b...)); }
/* qp fac C */              template<typename T1,typename T2>inline T1 qp(T1 a,T2 b){T1 ret=1;for(;b>0;a=1ll*a*a%mod,b>>=1)if(b&1)ret=mul(ret,a);return ret;}vi __fac({1,1}),__ifc({1,1}),__inv({0,1});inline void ___prep(int n){static int i=2;if(i<n)for(__fac.resize(n),__ifc.resize(n),__inv.resize(n);i<n;i++)__fac[i]=mul(i,__fac[i-1]),__inv[i]=mul((mod-mod/i),__inv[mod%i]),__ifc[i]=mul(__inv[i],__ifc[i-1]);}inline int fac(int x){return ___prep(x+1),__fac[x];}inline int ifc(int x){return ___prep(x+1),__ifc[x];}inline int inv(int x){return ___prep(x+1),__inv[x];}inline int C(int n,int m){if(n<m or n<0 or m<0)return 0;return mul(fac(n),ifc(m),ifc(n-m));} struct Light{int base,expv,sqrv;FastMod _Mod;vector<int>upv,dnv;inline void init(int bse=1,int exp=0,int Mod=mod){base=bse,expv=exp,_Mod.init(Mod);sqrv=__builtin_sqrtf(expv)+2;upv.resize(sqrv+1),dnv.resize(sqrv+1);dnv[0]=upv[0]=1;for(int i=1;i<=sqrv;++i)dnv[i]=_Mod(1ll*dnv[i-1]*base);upv[1]=dnv[sqrv];for(int i=2;i<=sqrv;++i)upv[i]=_Mod(1ll*upv[i-1]*upv[1]);}Light(int bse=1,int exp=0,int Mod=mod){init(bse,exp,Mod);}inline int operator()(const int&nexp){return _Mod(1ll*dnv[nexp%sqrv]*upv[nexp/sqrv]);}};

int n, a, b;

inline int t(int k) {
    if (k == a + b) return b == 0;
    return sub(C(a + b - k - 1, a - k), C(a + b - k - 1, a - k - 1));
}

signed main() {
    cin >> n >> a >> b;
    int j, ret = 0, ti;
    rep(i,0,a) {
        addi(ret, mul( C(n - a - b + 2 * i, i), t(i) ));
        subi(ret, mul( C(n - a - b + 1 + 2 * i, i), t(i + 1) ));
    } 
    cout << ret << '\n';
} 

Submission Info

Submission Time
Task F - Two Pieces
User joke3579
Language C++ (GCC 9.2.1)
Score 2200
Code Size 4461 Byte
Status AC
Exec Time 779 ms
Memory 220784 KiB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:41:9: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
   41 |     rep(i,0,a) {
      |         ^
./Main.cpp:11:38: note: in definition of macro ‘rep’
   11 | #define rep(i,s,t) for (register int i = (s), i##_ = (t) + 1; i < i##_; ++ i)
      |                                      ^
./Main.cpp:41:9: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
   41 |     rep(i,0,a) {
      |         ^
./Main.cpp:11:47: note: in definition of macro ‘rep’
   11 | #define rep(i,s,t) for (register int i = (s), i##_ = (t) + 1; i < i##_; ++ i)
      |                                               ^
./Main.cpp:40:9: warning: unused variable ‘j’ [-Wunused-variable]
   40 |     int j, ret = 0, ti;
      |         ^
./Main.cpp:40:21: warning: unused variable ‘ti’ [-Wunused-variable]
   40 |     int j, ret = 0, ti;
      |                     ^~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 2200 / 2200
Status
AC × 4
AC × 38
Set Name Test Cases
Sample 00-sample-01.txt, 00-sample-02.txt, 00-sample-03.txt, 00-sample-04.txt
All 00-sample-01.txt, 00-sample-02.txt, 00-sample-03.txt, 00-sample-04.txt, 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, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt
Case Name Status Exec Time Memory
00-sample-01.txt AC 8 ms 3608 KiB
00-sample-02.txt AC 2 ms 3472 KiB
00-sample-03.txt AC 2 ms 3596 KiB
00-sample-04.txt AC 49 ms 13984 KiB
01-01.txt AC 2 ms 3388 KiB
01-02.txt AC 2 ms 3412 KiB
01-03.txt AC 362 ms 159444 KiB
01-04.txt AC 283 ms 120376 KiB
01-05.txt AC 257 ms 71240 KiB
01-06.txt AC 529 ms 139804 KiB
01-07.txt AC 498 ms 172728 KiB
01-08.txt AC 114 ms 45132 KiB
01-09.txt AC 507 ms 166420 KiB
01-10.txt AC 62 ms 31720 KiB
01-11.txt AC 408 ms 118108 KiB
01-12.txt AC 289 ms 109136 KiB
01-13.txt AC 54 ms 18600 KiB
01-14.txt AC 263 ms 73276 KiB
01-15.txt AC 546 ms 109168 KiB
01-16.txt AC 526 ms 107228 KiB
01-17.txt AC 540 ms 154736 KiB
01-18.txt AC 393 ms 93420 KiB
01-19.txt AC 428 ms 102736 KiB
01-20.txt AC 257 ms 108464 KiB
01-21.txt AC 708 ms 207372 KiB
01-22.txt AC 766 ms 220784 KiB
01-23.txt AC 443 ms 147004 KiB
01-24.txt AC 581 ms 163116 KiB
01-25.txt AC 300 ms 123548 KiB
01-26.txt AC 487 ms 144220 KiB
01-27.txt AC 376 ms 158072 KiB
01-28.txt AC 511 ms 141584 KiB
01-29.txt AC 779 ms 217828 KiB
01-30.txt AC 603 ms 120276 KiB
01-31.txt AC 637 ms 127488 KiB
01-32.txt AC 560 ms 151892 KiB
01-33.txt AC 611 ms 120352 KiB
01-34.txt AC 643 ms 179116 KiB