제출 #1251367

#제출 시각아이디문제언어결과실행 시간메모리
1251367minhpkLottery (CEOI18_lot)C++20
45 / 100
403 ms49468 KiB
#include <bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int a, b;
    cin >> a >> b;
    int rows = a - b + 1;
    int *z = new int[a+1];
    for(int i = 1; i <= a; i++){
        cin >> z[i];
    }

    short *fdata = new short[(rows+1)*(b+1)];
    short **f = new short*[rows+2];
    for(int i = 1; i <= rows; i++){
        f[i] = fdata + i*(b+1);
        memset(f[i], 0, (b+1)*sizeof(short));
    }

    for(int i = 2; i + b - 1 <= a; i++){
        int sta = 1, sta1 = i, cur = 0;
        for(int j = 0; j < b; j++){
            if(z[sta + j] != z[sta1 + j])
                cur++;
        }
        f[sta][cur]++;
        f[sta1][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++;
            f[sta][cur]++;
            f[sta1][cur]++;
        }
    }

    for(int i = 1; i <= rows; i++){
        for(int k = 1; k <= b; k++){
            f[i][k] += f[i][k-1];
        }
    }

    int Q;
    cin >> Q;
    while(Q--){
        int x;
        cin >> x;
        if(x > b) x = b;
        for(int i = 1; i <= rows; i++){
            cout << f[i][x] << (i<rows?' ':'\n');
        }
    }

    delete[] z;
    delete[] fdata;
    delete[] f;

    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...