Submission #40988802


Source Code Expand

#include<atcoder/all>

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
using namespace atcoder;
const int MAXN=(1<<20)+10,mod=998244353,INF=1e9;
ll mypow(ll a,ll n){
    if(!n)return 1;
    ll tmp=mypow(a,n/2);tmp=tmp*tmp%mod;
    if(n&1)tmp=tmp*a%mod;return tmp;
}
ll myinv(ll a){return mypow(a,mod-2);}
void add(ll& x,ll v){x=(x+v)%mod;}
void sub(ll& x,ll v){x=(x+mod-v)%mod;}


namespace INV{
    vector<ll> solve(vector<ll> A,int N){
        if(N==1){
            vector<ll>ret(1);
            ret[0]=myinv(A[0]);
            return ret;
        }
        vector<ll> F0=solve(A,(N+1)>>1);
        A.resize(N,0);
        A=convolution(A,F0);A.resize(N,0);
        A=convolution(A,F0);A.resize(N,0);
        F0.resize(N,0);
        rep(i,0,N-1)F0[i]=F0[i]*2%mod,sub(F0[i],A[i]);
        return F0;
    }  
};
vector<ll> inv(vector<ll> p,int N){return INV::solve(p,N+1);}
//

namespace CFM{
    const ll MAXN=1e6+10,div2=(mod+1)/2;

    ll n,m,LIM=1e6;

    ll F[MAXN],G[MAXN],ans;

    ll fact[MAXN],rfact[MAXN];

    ll C(ll n,ll m){
        if(m<0 || n<m)return 0;
        return fact[n]*rfact[m]%mod*rfact[n-m]%mod;
    }

    void pre_solve1(){
        vector<ll> f(n+1,0),g(n+1,0);
        rep(i,0,n)f[i] = C(m-n+2*i,i)%mod;
        rep(i,1,n)g[i] = C(2*i,i)%mod;
        g[0]=1;
        vector<ll> pF=convolution(f,inv(g,n));
        rep(i,0,n)F[i]=pF[i]*(m-n+i)%mod;
    }
    void pre_solve2(){
        vector<ll> f(n+1,0),g(n+1,0);
        f[0]=(mod-1);
        rep(i,1,n)g[i] = C(2*i,i);
        g[0]=1;
        vector<ll> pF=convolution(f,inv(g,n));
        rep(i,1,n)G[i] = pF[i];
    }
    void solve1(){
        vector<ll>pF(n+1,0),pG(n+1,0);
        
        rep(i,0,n)pF[i] = F[i],pG[i] = C(2*i,i);

        pF=convolution(pF,pG);
        add(ans,pF[n]);
    }
    void solve2(){
        vector<ll>pF(n+1,0),pG(n+1,0),pH(n+1,0);
        rep(i,0,n)pF[i] = C(2*i,i),pH[i] = C(2*i+m-n,i);

        pF=convolution(pF,pH);pF.resize(n+1);

        rep(i,1,n)pG[i] = G[i]*div2%mod*(2*i+1)%mod;

        pF=convolution(pF,pG);
        add(ans,pF[n]);
    }
    void solve(){
        
        fact[0]=1;
        rep(i,1,LIM)fact[i]=fact[i-1]*i%mod;
        rfact[LIM]=myinv(fact[LIM]);
        per(i,LIM-1,0)rfact[i]=rfact[i+1]*(i+1)%mod;

        cin>>n>>m;
        if(n>m)swap(n,m);
        if(n==0 || m==0){
            cout<<n+m<<endl;
            exit(0);
        }

        pre_solve1();
        pre_solve2();

        solve1();   
        solve2();
        cout<<ans*myinv(C(n+m,n))%mod<<endl;
        
    }

};

int main(){
    CFM::solve();

    return 0;
}

Submission Info

Submission Time
Task F - Yes or No
User Crying
Language C++ (GCC 9.2.1)
Score 2000
Code Size 3039 Byte
Status AC
Exec Time 922 ms
Memory 112644 KB

Compile Error

./Main.cpp: In function ‘ll mypow(ll, ll)’:
./Main.cpp:22:5: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
   22 |     if(n&1)tmp=tmp*a%mod;return tmp;
      |     ^~
./Main.cpp:22:26: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
   22 |     if(n&1)tmp=tmp*a%mod;return tmp;
      |                          ^~~~~~

Judge Result

Set Name Sample Partial All
Score / Max Score 0 / 0 1500 / 1500 500 / 500
Status
AC × 5
AC × 28
AC × 75
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt
Partial sample_01.txt, sample_02.txt, sample_04.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_2_01.txt, subtask_2_02.txt, subtask_2_03.txt, subtask_2_04.txt, subtask_2_05.txt, subtask_2_06.txt, subtask_2_07.txt, subtask_2_08.txt, subtask_2_09.txt, subtask_2_10.txt, subtask_2_11.txt, subtask_2_12.txt, subtask_2_13.txt, subtask_2_14.txt, subtask_2_15.txt, subtask_2_16.txt, subtask_2_17.txt, subtask_2_18.txt, subtask_2_19.txt, subtask_2_20.txt, subtask_2_21.txt, subtask_2_22.txt, subtask_2_23.txt, subtask_2_24.txt, subtask_2_25.txt, subtask_2_26.txt, subtask_2_27.txt, subtask_2_28.txt, subtask_2_29.txt, subtask_2_30.txt, subtask_2_31.txt, subtask_2_32.txt, subtask_2_33.txt, subtask_2_34.txt, subtask_2_35.txt, subtask_2_36.txt, subtask_2_37.txt, subtask_2_38.txt, subtask_2_39.txt, subtask_2_40.txt
Case Name Status Exec Time Memory
sample_01.txt AC 33 ms 19280 KB
sample_02.txt AC 26 ms 19120 KB
sample_03.txt AC 24 ms 19308 KB
sample_04.txt AC 21 ms 19100 KB
sample_05.txt AC 22 ms 19180 KB
subtask_1_01.txt AC 22 ms 19248 KB
subtask_1_02.txt AC 26 ms 19288 KB
subtask_1_03.txt AC 25 ms 19260 KB
subtask_1_04.txt AC 24 ms 19124 KB
subtask_1_05.txt AC 23 ms 19244 KB
subtask_1_06.txt AC 28 ms 19320 KB
subtask_1_07.txt AC 24 ms 19132 KB
subtask_1_08.txt AC 21 ms 19240 KB
subtask_1_09.txt AC 31 ms 19120 KB
subtask_1_10.txt AC 28 ms 19256 KB
subtask_1_11.txt AC 23 ms 19248 KB
subtask_1_12.txt AC 30 ms 19728 KB
subtask_1_13.txt AC 44 ms 20928 KB
subtask_1_14.txt AC 71 ms 23592 KB
subtask_1_15.txt AC 215 ms 36048 KB
subtask_1_16.txt AC 214 ms 35992 KB
subtask_1_17.txt AC 219 ms 36044 KB
subtask_1_18.txt AC 214 ms 36072 KB
subtask_1_19.txt AC 216 ms 36216 KB
subtask_1_20.txt AC 215 ms 36164 KB
subtask_1_21.txt AC 215 ms 36208 KB
subtask_1_22.txt AC 219 ms 36076 KB
subtask_1_23.txt AC 218 ms 35864 KB
subtask_1_24.txt AC 213 ms 34456 KB
subtask_1_25.txt AC 211 ms 33964 KB
subtask_2_01.txt AC 24 ms 19156 KB
subtask_2_02.txt AC 26 ms 19280 KB
subtask_2_03.txt AC 21 ms 19292 KB
subtask_2_04.txt AC 922 ms 112464 KB
subtask_2_05.txt AC 913 ms 112384 KB
subtask_2_06.txt AC 915 ms 112448 KB
subtask_2_07.txt AC 918 ms 112524 KB
subtask_2_08.txt AC 917 ms 112404 KB
subtask_2_09.txt AC 916 ms 112644 KB
subtask_2_10.txt AC 916 ms 112564 KB
subtask_2_11.txt AC 916 ms 112436 KB
subtask_2_12.txt AC 917 ms 112644 KB
subtask_2_13.txt AC 920 ms 112632 KB
subtask_2_14.txt AC 918 ms 112560 KB
subtask_2_15.txt AC 921 ms 112536 KB
subtask_2_16.txt AC 916 ms 112428 KB
subtask_2_17.txt AC 909 ms 111084 KB
subtask_2_18.txt AC 895 ms 103364 KB
subtask_2_19.txt AC 864 ms 91784 KB
subtask_2_20.txt AC 27 ms 19180 KB
subtask_2_21.txt AC 21 ms 19176 KB
subtask_2_22.txt AC 25 ms 19308 KB
subtask_2_23.txt AC 25 ms 19320 KB
subtask_2_24.txt AC 27 ms 19304 KB
subtask_2_25.txt AC 23 ms 19312 KB
subtask_2_26.txt AC 28 ms 19432 KB
subtask_2_27.txt AC 29 ms 19524 KB
subtask_2_28.txt AC 39 ms 20800 KB
subtask_2_29.txt AC 55 ms 21900 KB
subtask_2_30.txt AC 218 ms 36224 KB
subtask_2_31.txt AC 431 ms 54596 KB
subtask_2_32.txt AC 910 ms 112488 KB
subtask_2_33.txt AC 913 ms 112460 KB
subtask_2_34.txt AC 917 ms 112480 KB
subtask_2_35.txt AC 904 ms 110980 KB
subtask_2_36.txt AC 909 ms 110272 KB
subtask_2_37.txt AC 433 ms 55924 KB
subtask_2_38.txt AC 119 ms 28228 KB
subtask_2_39.txt AC 892 ms 105084 KB
subtask_2_40.txt AC 209 ms 33876 KB