1 条题解

  • 0
    @ 2025-8-24 23:07:56

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar szm111213
    我是一名温柔体贴可爱的初中男生~~·最后活跃时间: 2025/8/18 1:12

    搬运于2025-08-24 23:07:56,当前版本为作者最后更新于2025-01-05 20:32:51,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


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

    • 每个楼道中,楼层号是 kk 的倍数的楼层上有 xx 个房间,其他楼层上有 yy 个房间。
    • 每个楼道的房间编号是连续的,从上一个楼道的最大编号的下一个数字开始。

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

    然后就要用上~~~

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

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

    #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一场空,~~~~~~~

    • 1

    信息

    ID
    11249
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者