제출 #617170

#제출 시각아이디문제언어결과실행 시간메모리
617170FatihSolakLottery (CEOI18_lot)C++17
100 / 100
511 ms8424 KiB
#include <bits/stdc++.h> #define N 10005 #define K 105 using namespace std; int pre[N][K]; int a[N]; int k[K]; int num[N]; int sum[N]; void solve(){ int n,l,q; cin >> n >> l; for(int i = 1;i<=n;i++){ cin >> a[i]; } cin >> q; vector<int> queries; for(int i = 1;i<=q;i++){ cin >> k[i]; queries.push_back(k[i]); } sort(queries.begin(),queries.end()); queries.resize(unique(queries.begin(),queries.end())-queries.begin()); int cnt = queries.size(); for(int i = l;i>=0;i--){ while(cnt && queries[cnt-1] >= i) cnt--; num[i] = cnt; } for(int i = 1;i<n;i++){ sum[i] = 0; for(int j = i+1;j<=n;j++){ sum[j] = sum[j-1] + (a[j] != a[j-i]); } for(int j = i+1;j+l-1<=n;j++){ int dif = sum[j + l-1] - sum[j-1]; dif = num[dif]; pre[j][dif]++; pre[j-i][dif]++; } } for(int i = 1;i<=n;i++){ for(int j = 1;j<K;j++){ pre[i][j] += pre[i][j-1]; } } for(int i = 1;i<=q;i++){ int idx = num[k[i]]; for(int j = 1;j+l-1<=n;j++){ cout << pre[j][idx] << ' '; } cout << '\n'; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); #ifdef Local freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while(t--){ solve(); } #ifdef Local cout << endl << fixed << setprecision(2) << 1000.0*clock()/CLOCKS_PER_SEC << " milliseconds"; #endif }
#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...