結果
| 問題 | No.391 CODING WAR |
| コンテスト | |
| ユーザー |
ayanamizuta
|
| 提出日時 | 2019-01-29 12:02:16 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 57 ms / 2,000 ms |
| コード長 | 1,207 bytes |
| コンパイル時間 | 1,410 ms |
| コンパイル使用メモリ | 159,604 KB |
| 実行使用メモリ | 11,264 KB |
| 最終ジャッジ日時 | 2024-10-09 12:43:35 |
| 合計ジャッジ時間 | 2,697 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
#include "bits/stdc++.h"
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)
#define LL long long
#define MOD 1000000007
#define FACT_MAX 1000000
LL fact[FACT_MAX];
class Combinatrics{
private:
long long mod = MOD;
int fact_max = FACT_MAX;
public:
Combinatrics(){
fact[0]=1;
for(int i=1;i<fact_max;i++)
fact[i] = (fact[i-1]*i)%mod;
}
long long power(long long n, long long e){
long long ret = 1;
long long b = n;
while(e){
if(e%2!=0)
ret*=b;
ret%=mod;
b*=b;
b%=mod;
e/=2;
}
return ret;
}
long long inv(long long n){
return power(n,mod-2);
}
long long div(long long n1,long long n2){
return n1*power(n2,mod-2)%mod;
}
long long nck(int n,int k){
if(k>n || k<0) return 0LL;
if(k==n || k==0) return 1LL;
return (fact[n]*inv(fact[n-k])%mod)*inv(fact[k])%mod;
}
};
LL n;
int m;
int main(){
cin>>n>>m;
if(n<(LL)m){cout<<0<<endl;return 0;}
LL ret=0;
Combinatrics comb;
REP(i,m){
ret=(i%2)?(MOD+ret-comb.nck(m,i)*comb.power((LL)(m-i),n)%MOD)%MOD:(ret+comb.nck(m,i)*comb.power((LL)(m-i),n)%MOD)%MOD;
}
cout<<ret<<endl;
return 0;
}
ayanamizuta