제출 #1094001

#제출 시각아이디문제언어결과실행 시간메모리
1094001alexander707070Lottery (CEOI18_lot)C++17
100 / 100
569 ms8532 KiB
#include<bits/stdc++.h> #define MAXN 10007 using namespace std; int n,l,q; int a[MAXN]; pair<int,int> k[MAXN]; int br[MAXN][107],matches,to[MAXN],ans[MAXN],pos[MAXN]; int calc(int x,int y){ int res=0; for(int i=0;i<l;i++){ if(a[x+i]==a[y+i])res++; } return res; } int main(){ cin>>n>>l; for(int i=1;i<=n;i++){ cin>>a[i]; } cin>>q; for(int i=1;i<=q;i++){ cin>>k[i].first; k[i].first=l-k[i].first; k[i].second=i; } sort(k+1,k+q+1); for(int i=1;i<=q;i++){ pos[k[i].second]=i; } int pt=0; for(int i=0;i<=l;i++){ while(pt<q and k[pt+1].first<=i)pt++; to[i]=pt; } for(int dist=1;dist<=n;dist++){ for(int i=1;i+dist+l-1<=n;i++){ if(i==1)matches=calc(i,i+dist); else{ if(a[i-1]==a[i+dist-1])matches--; if(a[i+l-1]==a[i+dist+l-1])matches++; } br[i][to[matches]]++; br[i+dist][to[matches]]++; } } for(int i=1;i<=n;i++){ for(int f=q-1;f>=1;f--){ br[i][f]+=br[i][f+1]; } } for(int i=1;i<=q;i++){ for(int f=1;f+l-1<=n;f++){ cout<<br[f][pos[i]]<<" "; } cout<<"\n"; } 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...