修建广场

第一次写博客哈**,嘿嘿出现错误多多包涵。**
先上题目:路是一条长度为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;
}

好啦,写完了,这么 简单的题,我居然…
拜拜,爱你们哦

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值