第一次写博客哈**,嘿嘿,出现错误,多多包涵。**
先上题目:路是一条长度为N的笔直道路,可以将路看成一个数轴,路的一端在数轴0的位置,另一端在N的位置。路边有M家住户,第i个住户会在数轴上点si 到点ti之间的每个整数点上种di颗树,包括点si和ti,即在si ,si+1,si+2…,ti 的位置上各种上di颗树。
市政府决定在路上修建一条长为L的广场给科丁市的市民们跳广场舞。为了修建广场,需要铲除路上长度为L的一段路上的所有的树,广场的起点和终点都必须在数轴的整点上。为了保护环境,市政府希望尽量减少铲除的树木的数量。于是市政府找到你,希望你能帮助他们计算最少需要铲除多少棵树。(这题目是我们的考试题hiahiahia~,你们应该没见过)
输入格式
第1行:3个空格分隔的整数N,M和L。
接下来M行,每行3个空格分隔的整数:si,ti和di ,表示第i个住户会在si到ti的区域中的每个整数点上种植di棵树。
输出格式
输出1行,一个正数,表示最少铲除的树的数量。
输入输出样列
输入样例1:
5 2 3
0 5 2
3 5 2
输出样例1:
10
说明
【样例说明】
样例1中:数轴长度为5, 拥有2个住户,广场的长度为3
住户1在数轴0、1、2、3、4、5上各种了2棵树
住户2在数轴3、4、5上各种了2棵树。
铲除区域0到3上的树,可以使得铲除的树的数量最小,其中位置0到位置2上各有2棵树,位置3上有4棵树,共铲除3*2+4 = 10棵树。、
【数据范围】
对于100%的数据,1≤L≤N≤1000,1≤M≤100,0≤si≤ti≤N,1≤di≤100
【耗时限制】1000ms 【内存限制】128MB
思路:把马路看成数轴,用数组模拟数轴。(都加粗了,应该看得见吧,再说三遍:模拟模拟模拟!!!)
因为注释都写代码里了,所以就不多做解释了
你们应该 肯定看得懂:
#include<bits/stdc++.h>
using namespace std;
int tree[1010]; //用数据模拟马路,tree[i]表示位置i上树的个数
int minn=0x7fffffff;//找最小值所以把minn设置为int的极大值
int main()
{
int n,m,l;
int s,t,d;
cin>>n>>m>>l;
for(int i=1;i<=m;i++) //枚举m个住户
{
cin>>s>>t>>d; ///读取每个住户的si,ti以及di
for(int j=s;j<=t;j++)
{
tree[j]+=d;
//从开始到结尾所有的树
}
}
for(int i=0;i<n-l;i++) //枚举连续的长度为L的线段
{
int tot=0;
for(int j=i;j<=i+l;j++) //计算长度为的线段上有多少棵树
{
tot+=tree[j];
}
minn=min(tot,minn);//打擂台找最小值
}
cout<<minn;
return 0;
}
好啦,写完了,这么难 简单的题,我居然…
拜拜,爱你们哦