简单的贪心,由于粗心,或者说叫编码能力的低下,wa了两次
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define MAX 100100
using namespace std;
int ans[MAX], M;
struct SEG
{
int a,b;
}s[MAX];
int cmp(const void *p,const void *q)
{
return ((SEG *)p)->a-((SEG *)q)->a;
}
int main()
{
int t,i,j,p,flag,start;
int a,b;
scanf("%d",&t);
while(t--)
{
i=0;
scanf("%d",&M);
while(scanf("%d %d",&a,&b)&&a+b)
{
s[i].a=a,s[i++].b=b;
}
qsort(s,i,sizeof(s[0]),cmp);
a=0,p=0,b=0,start=0;
while(1)
{
if(b>=M)
{
printf("%d\n",p);
for(j=0;j<p;j++)
{
printf("%d %d\n",s[ans[j]].a,s[ans[j]].b);
}
break;
}
flag=0,b=0;
for(j=start;s[j].a<=a&&j<i;j++)
{
flag=1;
if(s[j].b>b)
{
b=s[j].b;
ans[p]=j;
}
}
if(flag==0)
{
printf("0\n");
break;
}
p++;
start=j;
a=b;
}
if(t)
printf("\n");
}
return 0;
}