幼稚园的树「掘金日新计划 · 12 月更文挑战」

98 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情

幼稚园的树

链接:ac.nowcoder.com/acm/contest…
来源:牛客网

题目描述

牛牛在幼稚园做义工,幼稚园中共有 n 颗树,第 1 天中午时它们的高度分别为:h1​,h2​,…,hn​ (单位:厘米)。

每一天的晚上每棵树的高度都会增加 a 厘米,而牛牛的任务则是在第二天的清晨检查每一颗树的高度,若某颗树的高度超过了 k 厘米牛牛就会将它的高度修剪为 b 厘米。

牛牛想请你帮它计算一下第 m 天中午每一颗树的高度。

输入描述:

本题采用多组案例输入,第一行一个整数 T 代表案例组数。
每组案例中,第一行输入一个数 n。
接下来一行输入 n 个由空格分隔的整数代表:h1​,h2​,…,hn​。
接下来一行输入三个由空格分隔的整数代表:a k b。
接下来一行输入一个整数代表:m。
保证:
0<n,m,k≤1000
0<hi​,b≤k
0<a10
单个测试点中所有案例 n 的和与 m 的和都不超过 3000

输出描述:

对于每组案例,输出一行 n 个空格分隔的整数代表第 m 天中午每棵树的高度(单位:厘米),案例与案例之间用换行分隔。

示例1

输入

2
6
1 10 100 200 120 230
5 230 200
7
5
1 2 3 4 5
10 5 2
1

输出

31 40 130 230 150 225
1 2 3 4 5

思路

这个题就是很简单的暴力模拟问题,题目最重要的一句话就是超过k厘米之后就要把k厘米变成b厘米,通过两个循环,一个循环拿来遍历数组,另外一个循环拿来遍历天数,进行模拟,最后在按顺序输出出来就可以了。数据范围很小,所以直接暴力就可以啦。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
const int N=2e5+10;
int h[N];
void fun(){
    memset(h,0,sizeof h);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>h[i];
    }
    int a,k,b;
    cin>>a>>k>>b;
    int m;
    cin>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<m;j++){
            h[i]+=a;
            if(h[i]>k)h[i]=b;
        }
    }
    for(int i=1;i<=n;i++)cout<<h[i]<<" ";
    cout<<endl;
    return ;
}
signed main(){
    IOS;
    int T;
    cin>>T;
    while(T--){
        fun();
    }
    return 0;
}