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

· · 题解

题目大意

KOI村一条道路上有 N 座房屋,学生 i 住在坐标 i。每名学生就读学校1或学校2。

对于 i\neq j,满足下面任一条件则两人互为邻居:

求每名学生的邻居数量。

算法思路

依次枚举每个学生 i,再枚举所有学生 j

i=j,跳过(自己不算邻居);

如果 S_i=S_j:判断 |i-j|\le K_1,成立则计数加一;

如果 S_i\neq S_j:判断 |i-j|\le K_2,成立则计数加一。

枚举完成后输出该学生答案。

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,K1,K2;
    cin >> n >> K1 >> K2;
    int a[3005];
    for(int i = 1;i <= n;i++){
        cin >> a[i];
    }
    for(int i = 1;i <= n;i++){
        int cnt = 0;
        for(int j = 1;j <= n;j++){
            if(i == j) continue;
            if(a[i] == a[j]){
                if(abs(i - j) <= K1) cnt++;
            }else{
                if(abs(i - j) <= K2) cnt++;
            }
        }
        cout << cnt << " ";
    }
    return 0;
}