例题:种树
解题关键:
1、进行sort排序,排每个居民要求区间的终止位置
2、种树从右边种
3、s[k]==1代表有树,s[k]==0代表没树
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct people
{
int a,b,c;
} p[10001];
bool cmp(people a,people b)
{
return a.b<b.b;
}
int main()
{
int s[30010]= {0};
int w;
int sum=0,n,l,i,j;
scanf("%d",&l);
scanf("%d",&n);
for(i=0; i<n; i++)
scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
sort(p,p+n,cmp);
for(j=0; j<n; j++)
{
for(int k=p[j].a; k<=p[j].b; k++)
{
if(s[k]==1) p[j].c--;
if(p[j].c==0) break;
}
if(p[j].c>0)
{
for(w=p[j].b; w>=p[j].a; w--)
{
if(s[w]==0)
{
s[w]=1;
p[j].c--;
sum++;
}
if(p[j].c==0)
break;
}
}
}
printf("%d",sum);
return 0;
}
//9
//4
//1 4 2
//4 6 2
//8 9 2
//3 5 2