poj 3761 Bubble Sort
找规律发现冒泡排序的轮数与逆序对有关, k 是最大逆序对的个数。
令
那么
所求的答案为
c(k)−c(k−1)
#include <cstdio>
#define t14 20100713
#define ll long long
using namespace std;
int n ,k ;
ll f[1000005] ,ans ;
ll power(ll a,ll pos)
{
ll ans=1;
while(pos>0)
{
if (pos&1) ans=ans*a%t14;
a=a*a%t14;
pos>>=1;
}
return ans;
}
ll calc(int k)
{
return f[k]*power(k+1,n-k)%t14 ;
}
int main()
{
int T;register int i,j;
scanf("%d",&T);
f[0]=f[1]=1;for (i=2;i<=1000000;i++) f[i]=f[i-1]*i%t14;
while(T--)
{
scanf("%d%d",&n,&k);
if(k==0) puts("1");
else
{
ans=calc(k)-calc(k-1) ;
if(ans<0) ans+=t14;
printf("%lld\n",ans);
}
}
return 0;
}