F. 糖果共享(share)

    传统题 1000ms 256MiB

糖果共享(share)

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

Description


【问题描述】
Jimmy 要和其他同学们一起分享老师带来的糖果了!可是,老师不想让同学们这么快就领到糖果,于是决定跟大家玩一个分享糖果的游戏。
老师让 n 个同学们围成一圈坐在一起。接下来,对于第 i 个同学,老师会在第 ti 秒发给TA 一份糖果;每次得到糖果之后,第 i 个同学会固定等待 pi 秒,然后把糖果分给身旁的第i + 1 个同学(特殊的情况是,第 n 个同学会把糖果分给第 1 个同学)。注意每个同学既可以从老师那里得到糖果,也可以从旁边的同学那里得到糖果,而且老师发的糖果足够多,同学们只要收到了糖果,就一定能将糖果分出去。同学们的分糖果动作非常快,可以认为是不占用时间的。
在参与游戏的同时,Jimmy 很想知道他的几个好朋友们最快什么时候能得到糖果。你能帮帮他吗?

【输入格式】
第一行一个整数 n,表示同学们的数量。
第二行 n 个整数 t1, t2, · · · , tn,表示每个同学收到老师给的糖果的时刻。
第三行 n 个整数 p1, p2, · · · , pn,表示每个同学收到糖果之后、将糖果分出去之前等待的
时间。
第四行一个整数 q,表示 Jimmy 的询问数量。
接下来 q 行,每行一个整数 xi,表示 Jimmy 想问第 xi 个同学最快什么时候能得到糖
果。

【输出格式】
输出共 q 行,每行一个整数,表示每个询问对应的答案。

【样例 1 输入】
3
3 10 100
4 1 5
2
2
3

【样例 1 输出】
7
8

【样例 1 解释】
以下是游戏开始后,每个时刻发生的事件:
1. 第 3 秒,第 1 个同学领到了老师给的一份糖果;
2. 第 7 秒,第 1 个同学将糖果分给了第 2 个同学(糖果是老师给的);
3. 第 8 秒,第 2 个同学将糖果分给了第 3 个同学(糖果是第 1 个同学给的);
4. 第 10 秒,第 2 个同学领到了老师给的一份糖果;
5. 第 11 秒,第 2 个同学将糖果分给了第 3 个同学(糖果是老师给的);
6. 第 13 秒,第 3 个同学领到了老师给的一份糖果;
可知,第 2 个同学最快在第 7 秒得到了糖果;第 3 个同学最快在第 8 秒得到了糖果。
接下来,游戏还会继续下去,同学们还会继续互相分糖果,但是不会再改变 Jimmy 问
题的答案了。

【样例 2 输入】
4
1 1 1 1
100 100 100 100
3
3
4
1

【样例 2 输出】
1
1
1

【样例 3 输入】
4
1 2 4 7
1 2 3 4
4
3
3
2
4

【样例 3 输出】
4
4
2
7

【样例 4 输入】
8
50 22 63 28 91 60 64 27
84 87 78 16 94 36 87 93
8
1
2
3
4
5
6
7
8

【样例 4 输出】
50
22
63
28
44
60
64
27

【测试点约束】
对于 30% 的数据,保证 $1 ≤ n, q ≤ 5000$。
对于 100% 的数据,保证 $1 ≤ n, q ≤ 2 × 10^5,1 ≤ t_i, p_i ≤ 10^9,1 ≤ x_i ≤ n$。

Hint

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5 + 10;
LL t[N], p[N], ans[N];
int main()
{
    int n;scanf("%d", &n);
    for (int i = 1; i <= n; i++)scanf("%lld", &t[i]);
    for (int i = 1; i <= n; i++)scanf("%lld", &p[i]);
    ans[1] = t[1];
    for (LL i = n, x = 0; i > 1; i--){
        x = x + p[i];
        if (t[i] + x < ans[1])ans[1] = t[i] + x;
    }
    for (int i = 2; i <= n; i++){
        ans[i] = ans[i - 1] + p[i - 1];
        if (t[i] < ans[i])ans[i] = t[i];
    }
    int q;scanf("%d", &q);
    for (int i = 1, x; i <= q; i++){
        scanf("%d", &x);
        printf("%lld\n", ans[x]);
        }
    return 0;
}

202406

未参加
状态
已结束
规则
XCPC
题目
8
开始于
2024-6-28 18:00
结束于
2024-7-7 22:00
持续时间
220 小时
主持人
参赛人数
1