目录
题目描述
输入描述
输出描述
解析
完整代码
描述
Star为了参加编程选拔考试已经做好了非常充分的准备,但是他有个最重要的毛病就是他十分的粗心,为了能在考试中不犯低级错误,拿到比较好的成绩,star决定做件好事来增加他的rp。做什么好事呢?star想到了常州好多道路刚修好,路边的绿化还没有好,于是star
决定为一条刚修好的马路两旁种上树木。当然这一定是star亲自抄手(挖坑,种树,浇水……工程量好大,为了rp,star豁出去了,再累再苦也干),道路每隔5米种一棵树,正常情况下star种一棵树需要16分钟(这么快,因为我们的star身强力壮)但是由于有部分位置的土壤质地不一样,所以star种树的时间有时会和正常情况不一样,质地软的就种得快,质地硬的就种得慢,当然不一样的土壤是预先知道的,所以star
想统计他种完一条路上的树需要多少时间。
输入描述
第1行:两个整数m 和 n,m表示道路有m米,(m保证是5的倍数),n表示有n段不同质地的土壤;m<=100,n<=100;
第2…n+1行:每行3个整数i,j,k表示从第i米开始到j米结束这段道路的质地是一样的,(i<=j)在这些地上每种树需要耗费k分钟时间,道路起始位置为0,起始位置当然也是要植树的。
输出描述
一行:一个整数(保证在longint范围),star 种完一条道路上的树需要的总时间。(注意道路的两边都要植树)
用例输入 1
15 3 0 10 15 11 12 10 13 15 20
用例输出 1
130
提示
一共需要植8棵树,一边四棵。分别种在0 5 10 15 号位置共需要(15+15+15+20)*2=130分钟
来源
数组问题
兄弟们啊,不是你们c++学不会,而是个别老师他教不对啊。
来,就这题你看着懵不懵,懵不懵!
看看老高平时是怎么教我的:
为了解决这个问题,我们可以遵循以下步骤:
-
解析输入:读取道路的长度
m
和特殊土壤段的数量n
,然后读取每段特殊土壤的起始位置i
、结束位置j
和种植时间k:
cin>>m>>n;
for(int i=1;i<=n;i++){ cin>>b>>c>>d; }
-
初始化种植时间数组:创建一个长度为
m+1
的数组(因为位置是从0开始的),用来记录每个位置种植一棵树所需的时间。初始时,将每个位置的时间设置为默认时间16分钟:for(int i=0;i<=m;i++) a[i]=16;
-
更新特殊土壤段的种植时间:对于每段特殊土壤,更新数组中对应位置的种植时间:
for(int j=b;j<=c;j++) a[j]=d;
-
计算总时间:由于每隔5米种一棵树,计算道路两旁所有树的总种植时间,记得乘2,因为道路两旁都要种树:
for(int i=0;i<=m;i+=5) sum+=a[i]; cout<<sum*2;
结束了!
对了,忘说了一句话:
要想c++成绩好,就来jiabei小课堂。
还有,点我主页,看我简介,别给那三个人点赞就完了
下面出示代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
long long m,n,a[101],b,c,d,sum=0;
cin>>m>>n;
for(int i=0;i<=m;i++) a[i]=16;
for(int i=1;i<=n;i++){
cin>>b>>c>>d;
for(int j=b;j<=c;j++) a[j]=d;
}
for(int i=0;i<=m;i+=5) sum+=a[i];
cout<<sum*2;
return 0;
}