ZOI Round 1 & 新春联欢赛 U392419 『ZOI Round #1』等地铁

(今天心情不太好 , 划水摸鱼一下)

题目链接:U392419 『ZOI Round #1』等地铁 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

算法 : 前缀和

这题是前缀和板子题 再加上一点点的数学

我们需要知道地铁出发到达小Z所需站台的时间

由于题目给出的是相邻两个站台的时间

我们可以直接使用前缀和来计算地铁出发到每个站台所需时间

除此之外

我们还需要知道是第几班地铁(因为小Z可能会错过上一班 , 就必须等下一班)

按照整个时间轴来看 我们第一班地铁从0时刻到每个站台的时间已经通过前缀和处理出来了

第二班地铁到每个站台的时间  就是第一班地铁的基础上再加上发车间隔时间k

同理 第n班就是  就是第一班地铁的基础上再加上发车间隔时间 (n-1) * k

我们只需要保证  (n-1) * k + 地铁开往站台的时间 >= 小Z到达站台时间就行

代码如下:

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N = 1e5 + 10;
const int inf =  2147483647;

int xu[N];

void solve()
{
    int n , k , q , num;
    cin >> n >> k >> q;

    for (int i = 2 ; i <= n ; i++)
    {
        cin >> num;
        xu[i] = xu[i-1] + num;
    }

    while(q--)
    {
        int a , t;
        cin >> a >>t;
        if (t <= xu[a])
        {
            cout << xu[a] - t << endl;
        }
        else
        {
            int n = (t - xu[a] + k - 1) / k;
            cout << n * k + xu[a] - t << endl;
        }
    }
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    solve();

    return 0;
}

题目难度不大  但是是一道很好的板子题

(今天心情不好 , 状态不对 , 思维很乱 , 请大家谅解)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值