すぬさんの競プロノート
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;
}
}
段々と難し目の問題もとけるようになった.