Submission #1138593

#TimeUsernameProblemLanguageResultExecution timeMemory
1138593mnbvcxz123Binaria (CCO23_day1problem1)C++20
10 / 25
1098 ms65708 KiB
#include<bits/stdc++.h> using namespace std; using ll=long long; constexpr int mod=1e6+3; ll pw(ll a, ll w){ a%=mod; ll ret=1; while(w){ if(w&1)ret=ret*a%mod; a=a*a%mod; w>>=1; } return ret; } ll C(ll n, ll k){ if(n<0 or k<0 or k>n)return 0; ll ret=1; for(ll i=n-k+1;i<=n;++i) ret=ret*i%mod; ll p=1; for(ll i=1;i<=k;++i)p=p*i%mod; p=pw(p,mod-2); ret=ret*p%mod; return ret; } int n,k; vector<int>g[1000005]; int a[1000005]; int col[1000005]; bool vis[1000005]; void fk(){ cerr<<69<<'\n'; cout<<0<<'\n'; exit(0); } void add(int a, int b){ g[a].push_back(b); g[b].push_back(a); } void dfs(int v, int c){ if(!vis[v] and col[v]!=-1 and col[v]!=c)fk(); vis[v]=1; col[v]=c; for(const int&i:g[v]) if(!vis[i])dfs(i,c); } void solve(){ cin>>n>>k; int m=n-k+1; for(int i=1;i<=m;++i)cin>>a[i]; for(int i=1;i<=n;++i)col[i]=-1; for(int i=1;i<m;++i){ if(a[i]==a[i+1])add(i,i+k); else if(a[i]==a[i+1]+1){col[i]=1;col[i+k]=0;} else if(a[i]==a[i+1]-1){col[i]=0;col[i+k]=1;} else fk(); } for(int i=1;i<=n;++i) if(col[i]!=-1)dfs(i,col[i]); for(int i=1;i<=n;++i) cerr<<col[i]<<' '; int need=a[1],emp=0; for(int i=1;i<=k;++i){ if(col[i]==-1)++emp; else if(col[i]==1)--need; } cerr<<need<<' '<<emp<<'\n'; cout<<C(emp,need)<<'\n'; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...