이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |