18分求助
查看原帖
18分求助
356883
Turing_Huangrunzhe楼主2021/5/3 23:16

得分情况如图所示,本人思路是先按照结束范围排序,然后将每一个房子的范围从后往前种树,直到满足条件。

#include<bits/stdc++.h>
using namespace std;

struct data
{
	int beg,end,num;
}d1[500005];
bool area[300005];
bool cmp(data x,data y)
{
	if(x.end==y.end) return x.beg>y.beg;
	return x.end<y.end;
	
}
int main()
{
	int n,h,tot=0;
	cin>>n>>h;
	for(int i=1;i<=h;i++)
	{
		cin>>d1[i].beg>>d1[i].end>>d1[i].num; 
	}
	sort(d1+1,d1+h+1,cmp);
	for(int i=1;i<=h;i++)
	{
		int ko=d1[i].end;
		for(int j=d1[i].beg;j<=d1[i].end;j++)
		{
			if(area[j]) d1[i].num--;
		}
		while(d1[i].num!=0)
		{
			area[ko]=1;
			ko--;
			d1[i].num--;
			tot++;
		}
	}
	cout<<tot;
	return 0;
}
2021/5/3 23:16
加载中...