국왕 기우기
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#define N 200
using namespace std;
typedef long long ll;
ll n,m,c[N+5][N+5],x,f[N+5],P=1000000007,x1,x2;
ll pow_mul(ll a,ll b){
ll r = 1, base = a;
for (ll k = b; k ; k>>=1){
if (k&1) r=r*base%P;
base=base*base%P;
}
return r;
}
void init(){
cin>>n>>m;
memset(c,0,sizeof(c));
for (int i = 0; i <= N; ++i) c[i][0]=1;
for (int i = 1; i<= N; ++i)
for (int j = 1; j <= i; ++j){
c[i][j]=c[i-1][j]+c[i-1][j-1];
if (c[i][j]>=P) c[i][j]-=P;
}
x1 = pow_mul(m - 1, P - 2);
x2 = pow_mul(m , n + 1);
}
void dp(){
ll d = n,flag;
f[0] = (x2-m) * x1 % P;
if (f[0]<0) f[0]+=P;
//cout<<f[0]<<endl;
for (int i = 1;i <= m; ++i){
f[i]= x2 * d % P;
d = d * n % P;
for (int j = 0; j < i; ++j){
flag=1;
if ((i-j)%2==1) flag = -1;
f[i] = (f[i]+c[i][j]*flag*f[j]%P)%P;
if (f[i]<0) f[i]+=P;
}
f[i] = f[i] * x1 % P;
}
}
void print(){
if (m==1) cout<<n*(n+1)/2%P<<endl;
else cout<<f[m]<<endl;
//for (int i=0; i<=m;++i) cout<<f[i]<<endl;
}
int main(){
init();
dp();
print();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.