【Educational Codeforces Round 130 (Rated for Div. 2)】【题解A-C】

2022年6月13日16:25:17

A. Parkway Walk

题目大意:

你正在穿过你家附近的公园大道。公园路有 n+1 个长椅,从左到右从 1 到 n+1 编号。长凳 i 和 i+1 之间的距离是 ai 米。

最初,你有 m 个单位的能量。要走 1 米的距离,您需要消耗 1 个单位的能量。如果你没有精力,你就不能走路。此外,您可以坐在长凳上恢复能量(这是恢复能量的唯一方法)。当你坐着时,你可以恢复任何你想要的整数能量(如果你坐得更久,你会恢复更多的能量)。请注意,您的能量可以超过 m。

你的任务是找到你必须恢复的最小能量(通过坐在长凳上)从长凳 1 到达长凳 n+1(并结束你的步行)。

你必须回答 t 个独立的测试用例。

输入
输入的第一行包含一个整数 t (1≤t≤100) — 测试用例的数量。然后是 t 个测试用例。

测试用例的第一行包含两个整数 n 和 m(1≤n≤100;1≤m≤10^4)。

测试用例的第二行包含 n 个整数 a1,a2,…,an (1≤ai≤100),其中 ai 是长凳 i 和 i+1 之间的距离。

输出
对于每个测试用例,打印一个整数——在相应的测试用例中,从长凳 1 到达长凳 n+1(并结束步行)所需恢复的最小能量(通过坐在长凳上)。

inputCopy
3
3 1
1 2 1
4 5
3 3 5 2
5 16
1 2 3 4 5
outputCopy
3
8
0

题解:

对距离求和,减去初始值,即得到答案。

void solve(){
    int n, k;
    cin >> n >> k;
    ll sum = 0;
    for (int i = 0; i < n;i++){
        int x;
        cin>>x;
        sum += x;
    }
    cout << max(sum - k,0ll) << nl;
}

B. Promo

题目大意:

商店出售 n 件商品,第 i 件商品的价格为 pi。商店管理层将举行促销活动:如果顾客至少购买 x 件商品,则其中最便宜的 y 件是免费的。

管理层尚未决定 x 和 y 的确切值。因此,他们要求您处理 q 个查询:对于给定的 x 和 y 值,如果客户进行一次购买,则确定免费收到的物品的最大总价值。

请注意,所有查询都是独立的;它们不会影响商店的库存。

输入
第一行包含两个整数 n 和 q (1≤n,q≤2⋅10^5)——分别是商店中的商品数量和查询次数。

第二行包含 n 个整数 p1,p2,…,pn (1≤pi≤10^6),其中 pi — 第 i 件商品的价格。

以下 q 行分别包含两个整数 xi 和 yi (1≤yi≤xi≤n) — 第 i 个查询中参数 x 和 y 的值。

输出
对于每个查询,打印一个整数——一次购买免费收到的物品的最大总价值。

inputCopy
5 3
5 3 1 5 2
3 2
1 1
5 3
outputCopy
8
5
6

题解:

贪心:排序后取最大的 xi 件衣服中偏小的 yi 件的价值和。

注意暴力会超时,选择前缀和O(1)的时间解决问题。

不开 long long 毁一生

void solve(){
    int n, q;
    cin >> n >> q;
    int p[n+1] = {0};
    for (int i = 0; i < n;i++)
        cin >> p[i];
    sort(p, p + n);
    //超时
    // while(q--){
    //     int a, b;
    //     cin >> a >> b;
    //     int sum = 0;
    //     for (int i = n - a; i < n - a + b; i++)
    //         sum += p[i];
    //     cout << sum << nl;
    // }
    ll sum[n + 1] = {0};
    sum[1] = p[0];
    for (int i = 2; i <= n;i++)
        sum[i] = sum[i - 1] + p[i - 1];
    while(q--){
        int a, b;
        cin >> a >> b;
        cout << sum[n - a + b] - sum[n - a] << nl;
    }
}

C. awoo’s Favorite Problem

题目大意:

给定两个长度为 n 的字符串 s 和 t。两个字符串中的每个字符都是“a”、“b”或“c”。

在一个动作中,您可以执行以下操作之一:

选择 s 中出现的“ab”并将其替换为“ba”;
选择 s 中出现的“bc”并将其替换为“cb”。
您可以执行任意数量的移动(可能为零)。你能改变字符串 s 使它等于字符串 t 吗?

输入
第一行包含一个整数 q (1≤q≤10^4)——测试用例的数量。

每个测试用例的第一行包含一个整数 n (1≤n≤10^5)——字符串 s 和 t 的长度。

第二行包含长度为 n 的字符串 s。每个字符是“a”、“b”或“c”。

第三行包含长度为 n 的字符串 t。每个字符是“a”、“b”或“c”。

所有测试用例的 n 总和不超过 10^5。

输出
对于每个测试用例,如果您可以通过执行任意数量的移动(可能为零)来更改字符串 s 以使其等于字符串 t,则打印“YES”。否则,打印“否”。

inputCopy
5
3
cab
cab
1
a
b
6
abbabc
bbaacb
10
bcaabababc
cbbababaac
2
ba
ab
outputCopy
YES
NO
YES
YES
NO

题解:

字符串处理,按照题意的处理方式进行分类讨论,具体见代码:

bool check(string &a,int i,int n,char b,char c){
    if(i + 1 >= n)
        return 0;
    for (int j = i + 1; j < n; ++j) {
        if(a[j] == b)
            continue;
        else if(a[j] == c) {
            swap(a[i], a[j]);
            return 1;
        } else {
            return 0;
        }
    }
}
void solve(){
    int n;
    string a, b;
    cin >> n >> a >> b;
    bool flag = 1;
    for (int i = 0; i < n && flag; ++i) {
        if(a[i] != b[i]) {
            if(a[i] == 'b' && b[i] == 'c') 
                flag = check(a, i, n,'b','c');
            else if(a[i] == 'a' && b[i] == 'b') 
                flag = check(a, i, n,'a','b');
            else 
                flag = 0;
        }
    }
    if(a != b)
        flag = 0;
    if(flag)
        cout << "yes" << nl;
    else
        cout << "no" << nl;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
"educational codeforces round 103 (rated for div. 2)"是一个Codeforces平台上的教育性比赛,专为2级选手设计评级。以下是有关该比赛的回答。 "educational codeforces round 103 (rated for div. 2)"是一场Codeforces平台上的教育性比赛。Codeforces是一个为程序员提供竞赛和评级的在线平台。这场比赛是专为2级选手设计的,这意味着它适合那些在算法和数据结构方面已经积累了一定经验的选手参与。 与其他Codeforces比赛一样,这场比赛将由多个问题组成,选手需要根据给定的问题描述和测试用例,编写程序来解决这些问题。比赛的时限通常有两到三个小时,选手需要在规定的时间内提交他们的解答。他们的程序将在Codeforces的在线评测系统上运行,并根据程序的正确性和效率进行评分。 该比赛被称为"educational",意味着比赛的目的是教育性的,而不是针对专业的竞争性。这种教育性比赛为选手提供了一个学习和提高他们编程技能的机会。即使选手没有在比赛中获得很高的排名,他们也可以从其他选手的解决方案中学习,并通过参与讨论获得更多的知识。 参加"educational codeforces round 103 (rated for div. 2)"对于2级选手来说是很有意义的。他们可以通过解决难度适中的问题来测试和巩固他们的算法和编程技巧。另外,这种比赛对于提高解决问题能力,锻炼思维和提高团队合作能力也是非常有帮助的。 总的来说,"educational codeforces round 103 (rated for div. 2)"是一场为2级选手设计的教育性比赛,旨在提高他们的编程技能和算法能力。参与这样的比赛可以为选手提供学习和进步的机会,同时也促进了编程社区的交流与合作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eternity_GQM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值