题解:P11506 [ROIR 2017 Day 1] 校园

szm111213

2025-01-05 20:32:51

Solution

来来来,一道橙题,先找一下规律吧!!!

于是,啪!!!我们可以计算每个楼道的房间总数,然后根据房间编号确定它所在的楼道和楼层。

然后就要用上~~~

设楼道的房间总数为 T,其中,\left\lfloor \frac{n}{k} \right\rfloor 表示 n 除以 k 的商,即 k 的倍数的楼层数。

接下来是本人马蜂优良的代码:

#include <bits/stdc++.h>//万恶之源
using namespace std;
int main()
{
    long long n, k, x, y;
    cin >> n >> k >> x >> y;
    long long t = (n / k) * x + (n - n / k) * y;// 计算每个楼道的房间总数
    int q;
    cin >> q;
    for (int i = 0; i < q; i++)
    {
        long long a;
        cin >> a;
        long long d = (a - 1) / t + 1;// 确定楼道编号
        long long r = (a - 1) % t + 1;// 确定在该楼道内的相对编号
        // 以下是确定楼层编号
        long long f = 0;
        long long s = 0;
        for (long long i = 1; i <= n; i++)
        {
            if (i % k == 0)
            {
                s += x;
            }
            else
            {
                s += y;
            }
            if (s >= r)
            {
                f = i;
                break;
            }
        }
        cout << f << endl;
    }

    return 0;
}

//十年oi一场空,~~~