排序直接做就行了
#include<cstdio> #include<algorithm> using namespace std; int n,ans=0; struct Event{ int s,t; friend bool operator<(Event a,Event b){ return (a.t<b.t)||(a.t==b.t && a.s<b.s); } }e[10005]; int main(){ freopen("1664.in","r",stdin); freopen("1664.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d %d",&e[i].s,&e[i].t); e[i].t+=e[i].s; } sort(e+1,e+n+1); int last=0; for(int i=1;i<=n;i++){ if(e[i].s>=e[last].t){ ans++; last=i; } else if(e[i].t<e[last].t){ last=i; } } printf("%d\n",ans); return 0; }