제출 #1251399

#제출 시각아이디문제언어결과실행 시간메모리
1251399minhpkLottery (CEOI18_lot)C++20
100 / 100
476 ms9148 KiB
#include <bits/stdc++.h> using namespace std; int a,b; int z[1000005]; vector<vector<short>> f; pair<int,int> q[1005]; int pos[1000005]; vector<vector<short>> res; signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> a >> b; for (int i=1;i<=a;i++){ cin >> z[i]; } int c; cin >> c; for (int i=1;i<=c;i++){ cin >> q[i].first; q[i].second=i; } sort(q+1,q+1+c); int cur=0; for (int i=1;i<=b;i++){ pos[i]=1e6; } for (int i=1;i<=c;i++){ while (cur<=b && cur<=q[i].first){ pos[cur]=i; cur++; } } // cerr << "ok" << "\n"; f.resize(a-b+2,vector<short>(c+1)); res.resize(a-b+2,vector<short>(c+1)); for (int i=2;i+b-1<=a;i++){ int sta=1; int sta1=i; int cur=0; for (int j=0;j<b;j++){ if (z[j+sta]!=z[j+sta1]){ cur++; } } if (pos[cur]<=c){ f[sta][pos[cur]]++; f[sta1][pos[cur]]++; } for (int j=i+b;j<=a;j++){ if (z[sta]!=z[sta1]){ cur--; } sta++; sta1++; if (z[sta+b-1]!=z[sta1+b-1]){ cur++; } if (pos[cur]<=c){ f[sta][pos[cur]]++; f[sta1][pos[cur]]++; } } } // cerr << "ok" << "\n"; for (int i=1;i<=c;i++){ if (i>1){ for (int j=1;j<=a-b+1;j++){ f[j][i]+=f[j][i-1]; } } for (int j=1;j<=a-b+1;j++){ res[j][q[i].second]=f[j][i]; } } // cerr << "ok" << "\n"; for (int i=1;i<=c;i++){ for (int j=1;j<=a-b+1;j++){ cout << res[j][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...