记录编号 608924 评测结果 AAAAAAAAAAAAAAAAAAAAAAAAA
题目名称 4190.Binaria 最终得分 100
用户昵称 Gravatar梦那边的美好TE 是否通过 通过
代码语言 C++ 运行时间 1.635 s
提交时间 2025-10-30 16:29:33 内存使用 14.16 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
const int mod=1e6+3;
const int N=1e6+10;
int n,k,s[N],val[N],f[N],pos[N];
long long ksm(int a,int b){
	long long ans=1;
	while(b){
		if(b&1)ans=1ll*ans*a%mod;
		a=1ll*a*a%mod;
		b>>=1;
	}
	return ans;
}
long long fac(int n){
	long long ans=1;
	for(int i=1;i<=n;i++)ans=1ll*ans*i%mod;
	return ans; 
}
long long inv(int n){
	return ksm(fac(n),mod-2);
}
long long C(int n,int m){
	return fac(n)*inv(m)%mod*inv(n-m)%mod;
}
int found(int x){return f[x]==x?x:f[x]=found(f[x]);}
int main(){
	freopen("Binaria.in","r",stdin);
	freopen("Binaria.out","w",stdout);
	scanf("%d %d",&n,&k);
	for(int i=k;i<=n;i++)scanf("%d",s+i);
	for(int i=1;i<=n;i++)f[i]=i,val[i]=-1,pos[i]=-1; 
	for(int i=k+1;i<=n;i++){
		int u=i-k,v=i,c=s[i]-s[i-1];
		if(c==0){
			u=found(u),v=found(v);
			if(u!=v)f[u]=v; 
		}
		if(c==1)pos[u]=0,pos[v]=1;
		if(c==-1)pos[u]=1,pos[v]=0;
	}
	for(int i=1;i<=n;i++)if(pos[i]!=-1)val[found(i)]=pos[i];
	
	int p=0,w=0;
	for(int i=1;i<=k;i++){
		int u=found(i);
		if(val[u]==-1)w++;
		else if(val[u]==1)p++;
	}	
	printf("%lld\n",C(w,s[k]-p));
	return 0;
}