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

· · 题解

思路:先输入每个学生在哪个学校。然后建立双重循环,枚举并判断每两个学生是否是邻居。
当他们在一所学校中,并且两人所居住房屋之间的距离不超过 K_1,那么就把他们统计邻居数量的变量都加 1
当他们不在一所学校中,并且两人所居住房屋之间的距离不超过 K_2,那么就把他们统计邻居数量的变量都加 1。最后输出每个学生的邻居数即可。
代码:

#include <bits/stdc++.h>
using namespace std;

int a[3005];

int main()
{
    int n, k1, k2;
    cin >> n >> k1 >> k2;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    for (int i = 1; i <= n; i++)
    {
        int sum = 0, s1 = a[i];
        for (int j = 1; j <= n; j++)
        {
            if (i == j) continue;
            int s2 = a[j];
            int b = abs(i - j);
            if (s1 == s2) 
            {
                if (b <= k1) sum++;
            }
            else 
            {
                if (b <= k2) sum++;
            }
        }
        cout << sum << " ";
    }
    return 0;
}