見出し画像

すぬさんの競プロノート

ABC065  C - Reconciled?

問題:犬N匹とサルM匹を隣り合わないように一列に並べるときの場合の数をもとめる

犬もしくはサルが,一方よりも2匹以上多い場合は不可能なので0.
それ以外の場合は,2^(M+N)となる.ただしM=Nの場合(犬とサルが同数)は,犬と猿が入れ替わる場合が追加されるので,2^(M+N+1)になる
10e9+7で割ったあまりを出力することを忘れないようにする.

void solve(long long N, long long M){
   if(abs(N-M)>1)cout<<0<<endl;
   // else cout<<1<<endl;
   else{
       LL ans=1;
       for(int i=1; i <=N; i++){
           ans = (ans*i)%MOD;
       }

       for(int i=1; i <=M; i++){
           ans = (ans*i)%MOD;
       }
       // cout<<ans*2%MOD<<endl;
       if(N==M)cout<<ans*2%MOD<<endl;
       else cout<<ans<<endl;
   }
}

段々と難し目の問題もとけるようになった.

この記事が気に入ったらサポートをしてみませんか?