题解:P17134 [KOI 2026 #1] 邻居

· · 题解

思路

模拟题。第一步先枚举两边 K_1 个数,如有学校相同的答案加一,第二步枚举两边 K_2 个数,如有学校不同的答案加一即可。注意超界的不要枚举计算。

代码

#include<bits/stdc++.h>
using namespace std;
int a[100010];
int main(){
    int n,k1,k2;
    scanf("%d%d%d",&n,&k1,&k2);
    for(int i=1;i<=n;++i){
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=n;++i){
        int cnt=0;
        for(int j=max(1,i-k1);j<i;++j){
            if(a[j]==a[i])++cnt;
        }
        for(int j=min(n,i+k1);j>i;--j){
            if(a[j]==a[i])++cnt;
        }
        for(int j=max(1,i-k2);j<i;++j){
            if(a[j]!=a[i])++cnt;
        }
        for(int j=min(n,i+k2);j>i;--j){
            if(a[j]!=a[i])++cnt;
        }
        printf("%d ",cnt);
    }
    return 0;
}