CF1833F Ira and Flamenco
:::数组溢出 可以用map
:::前缀和优化

#include<cstdio> #include<iostream> #include<algorithm> #include<map> //#include<queue> //#include<vector> //#include<bits/stdc++.h> #define ll long long #define ddd printf("-----------------------\n"); using namespace std; const int maxn=2e5+10 ; const int mod=1e9+7; int n,m,a[maxn],res,sum[maxn]; map<int,int> mp; int ksm(int a,int b) { int res=1; while(b) { if(b%2==1) res=1ll*res*a%mod; a=1ll*a*a%mod; b>>=1; } return res%mod; } /* int ksm(int a, int k) { int ret = 1; while (k) { if (k & 1) ret = 1ll * ret * a % mod; a = 1ll * a * a % mod; k >>= 1; } return ret; }*/ int main() { ios::sync_with_stdio(false); int T;cin>>T; while(T--) { res=0,sum[0]=1;mp.clear(); cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i],mp[a[i]]++; sort(a+1,a+n+1); int len=unique(a+1,a+n+1)-(a+1); //int pr=1; for(int i=1,j=1;i<=len;i++) { sum[i]=1ll*sum[i-1]*mp[a[i]]%mod; if(a[i]-a[j]>=m) j++; if(i-j+1==m&&a[i]-a[j]==m-1){ int tmp=1ll*sum[i]*ksm(sum[j-1],mod-2)%mod; res=(res+tmp)%mod; } } cout<<res<<'\n'; } return 0; }