提交时间:2019-11-09 17:24:38

运行 ID: 2145

#include<cstdio> #include<algorithm> using namespace std; struct node{ int x,y,s; bool operator < (const node &p)const { if(y<p.y) return 1; else if(y==p.y&&x<=p.x) return 1; return 0; } }a[10005],t; int main() { int n,i,j,sum=0; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d%d",&a[i].x,&a[i].y); a[i].s=2;//标记该闭区间剩下需要的元素 } sort(a+1,a+n+1);//排序 } 我们可以运用贪心的方法来做这一道题。 for(i=1;i<=n;i++){ if(a[i].s>0){//a[i]可用 a[i].s--;//a[i]所需的元素-1 for(j=i+1;j<=n;j++){//该元素在其他闭区间是否存在 if(a[i].y>=a[j].x&&a[i].y<=a[j].y) a[j].s--; } sum++; if(a[i].s>0)//再进行一次判断 { a[i].s--; for(j=i;j<=n;j++){ if(a[i].y-1>=a[j].x&&a[i].y-1<=a[j].y) a[j].s--; } sum++; } } } printf("%d",sum);