ACWing1854.晋升计数(模拟)

该博客详细介绍了ACWing每日一题(2022.4.10)——ACWing1854.晋升计数的题目内容和解题思路。参赛者在全美奶牛奥林匹克竞赛中通过答题晋升,题目要求根据比赛前后各组人数推算晋升次数。解题关键在于倒序计算,根据白金组到铜组的晋升情况逐级推算。提供的C++代码实现了这一逻辑,通过遍历数组得出晋升人数。
摘要由CSDN通过智能技术生成


前言

ACWing每日一题(2022.4.10):ACWing1854.晋升计数


一、题目

题目链接: ACWing1854.晋升计数.

奶牛贝茜正在帮助农夫约翰举办全美奶牛奥林匹克竞赛(USACO)。

这是一个线上比赛,参赛者通过回答具有挑战性的问题,来展示自己对牛的琐事的掌握。

为了迎合更大范围的参与者,约翰最近扩大了比赛范围,将比赛按难度分为四个组:铜、银、金和白金。

所有新的参赛者都从铜组开始,只要他们在比赛中取得完美的成绩,他们就会被提升到下一个更高的组。

一个参赛者甚至有可能在同一场比赛中被多次提升。

农夫约翰会记录所有参赛者的名单和他们当前所在的分组。

这样就可以在举办比赛时,让每个人都在属于自己水平的分组开始。

在公布最近一次比赛的结果时,约翰希望包含铜组晋升银组、银组晋升金组、金组晋升白金组的人员数量信息。

然而,在比赛中他却忘记统计每组的晋升人数了。

贝茜是一头聪明的奶牛,她发现可以仅根据比赛前后处于各个组别的人员数量来推断晋升的次数。

请帮她做出这个计算。

输入格式
共四行,每行两个整数。

第一行表示比赛前后铜组人员数量。

第二行表示比赛前后银组人员数量。

第三行表示比赛前后金组人员数量。

第四行表示比赛前后白金组人员数量。

输出格式
共三行,每行输出一个整数。

第一行整数表示铜组晋升银组的人数。

第二行整数表示银组晋升金组的人数。

第三行整数表示金组晋升白金组的人数。

数据范围
输入整数范围 [0,106]。

输入样例:
1 2
1 1
1 1
1 2
输出样例:
1
1
1
样例解释
在此样例中,比赛前各组都只有 1 人,比赛后铜组和白金组各增加 1 人。

一种可能的情况是,赛后出现了两个新报名人员,加入铜组,赛前处于铜组的人员一路升入白金组。

二、解题思路

a数组存储比赛前每组人数,b数组存储比赛后每组人数,res数组存储晋升人数即输出结果。
res[4] = b[4]-a[4]:金->白金
res[3] = b[3]-a[3]:银->金 + res[4]:(银->)金->白金
res[2] = b[2]-a[2]:铜->银 +res[3]:(铜->)银->金、(铜->银->)金->白金
所以可以倒着遍历,由上级结果推出下面的。
这里为什么需要算后面的,是因为“一个参赛者甚至有可能在同一场比赛中被多次提升”这句话,例如,一个人本来是银组的,然后他一直晋升到了白金组,但是他也算是银组晋升金组人数里面的。
举个类似的例子,一个人做了4次核酸,那么这个人肯定也做了3次核酸。

#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 1000

int main(){
    int a[MAX],b[MAX],res[MAX];
    for(int i=1;i<=4;i++){
        scanf("%d %d",&a[i],&b[i]);
    }

    memset(res,0,sizeof(res));

    for(int i=4;i>=2;i--){
        res[i] = res[i+1]+b[i]-a[i];
    }

    for(int i=2;i<=4;i++){
        printf("%d\n",res[i]);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值