제출 #1162266

#제출 시각아이디문제언어결과실행 시간메모리
1162266sofija6Binaria (CCO23_day1problem1)C++20
25 / 25
93 ms70728 KiB
#include <bits/stdc++.h> #define ll long long #define MAXN 1000010 #define MOD 1000003 using namespace std; ll a[MAXN],val[MAXN],fact[MAXN]; vector<ll> p[MAXN]; void Init() { fact[0]=1; for (ll i=1;i<MAXN;i++) fact[i]=(fact[i-1]*i)%MOD; return; } ll Exp(ll n,ll k) { ll val[30]; val[0]=n; for (ll i=1;i<30;i++) val[i]=(val[i-1]*val[i-1])%MOD; ll ans=1,cur=29; while (k) { if ((1<<cur)<=k) { k-=(1<<cur); ans=(ans*val[cur])%MOD; } cur--; } return ans; } ll Binomial_Coefficient(ll n,ll k) { return (((fact[n]*Exp(fact[k],MOD-2))%MOD)*Exp(fact[n-k],MOD-2))%MOD; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll n,k; cin >> n >> k; for (ll i=1;i<=n-k+1;i++) cin >> a[i]; if (k==1) { cout << 1; return 0; } Init(); for (ll i=1;i<=n;i++) val[i]=-1; for (ll i=1;i<=k;i++) p[i%k].push_back(i); for (ll i=2;i<=n-k+1;i++) { if (a[i]==a[i-1]) val[i+k-1]=val[p[(i+k-1)%k].back()]; else if (a[i]>a[i-1]) { val[i+k-1]=1; val[p[(i+k-1)%k].back()]=0; } else { val[i+k-1]=0; val[p[(i+k-1)%k].back()]=1; } p[(i+k-1)%k].push_back(i+k-1); } for (ll i=0;i<k;i++) { ll lastt=-1; for (ll j=p[i].size()-1;j>=0;j--) { if (val[p[i][j]]==-1) val[p[i][j]]=lastt; else lastt=val[p[i][j]]; } } ll sum=0,cnt=0; for (ll i=1;i<=k;i++) { if (val[i]!=-1) sum+=val[i]; else cnt++; } cout << Binomial_Coefficient(cnt,a[1]-sum); 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...