Submission #1203290

#TimeUsernameProblemLanguageResultExecution timeMemory
1203290AlgorithmWarriorBinaria (CCO23_day1problem1)C++20
25 / 25
193 ms13892 KiB
#include <bits/stdc++.h> using namespace std; int const MAX=1e6+5; int const MOD=1e6+3; int v[MAX]; int n,k; int tip[MAX]; void read(){ cin>>n>>k; int i; for(i=1;i<=n-k+1;++i) cin>>v[i]; } void restrictions(){ int i; for(i=1;i<=n-k;++i) if(v[i]<v[i+1]){ tip[i]='0'; tip[i+k]='1'; } else if(v[i]>v[i+1]){ tip[i]='1'; tip[i+k]='0'; } } void umple(int ind){ if(ind-k>0 && !tip[ind-k]){ tip[ind-k]=tip[ind]; umple(ind-k); } if(ind+k<=n && !tip[ind+k]){ tip[ind+k]=tip[ind]; umple(ind+k); } } void umplere(){ int i; for(i=1;i<=n;++i) if(tip[i]) umple(i); } pair<int,int> rasp(){ int cnt1=0; int cnt2=0; int i; for(i=1;i<=k;++i){ if(!tip[i]) ++cnt1; if(tip[i]=='1') ++cnt2; } return {cnt1,v[1]-cnt2}; } int fact[MAX]; void get_fact(){ fact[0]=1; int i; for(i=1;i<MAX;++i) fact[i]=1LL*fact[i-1]*i%MOD; } int bin_exp(int base,int exp){ int rez=1; while(exp){ if(exp&1) rez=1LL*rez*base%MOD; base=1LL*base*base%MOD; exp/=2; } return rez; } int comb(int n,int k){ return 1LL*fact[n]*bin_exp(fact[k],MOD-2)%MOD*bin_exp(fact[n-k],MOD-2)%MOD; } void write(int ans){ cout<<ans; } int main() { read(); restrictions(); umplere(); pair<int,int>rsp=rasp(); get_fact(); write(comb(rsp.first,rsp.second)); return 0; }
#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...