题意:定义
,现给定一组
,求满足该
的排列数。
题解摘自官方题解。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=100010;
const int mod=1e9+7;
int a[maxn],n;
ll dp[maxn];
int main(){
int t;scanf("%d",&t);
a[0]=0;
while(t--){
scanf("%d",&n);
bool flag=1;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]<a[i-1]||a[i]>=n||(i!=1&&a[i]<=0))
flag=0;
}
if(!flag||a[1]!=0){
puts("0");continue;
}
dp[1]=1;
for(int i=2;i<=n;i++){
if(a[i]>a[i-1])
dp[i]=dp[i-1]*2%mod;
else
dp[i]=dp[i-1]*(a[i]-i+2)%mod;
}
printf("%I64d\n",dp[n]);
}
return 0;
}