题目地址:点击打开链接
我真的不明白啊,干嘛非要贪心?直接推不行,这么做样例都能过啊,还有什么样例过不了呢?
注释掉的代码能AC
#include<stdio.h>
struct{
int x,y;
int flag;
}node[5005];
main(){
int a,b,n,i,j,count,k,t,g;
scanf("%d",&t);
/*while和for怎么可能不相同呢?
但大循环的和小循环的变量一定注意不能相同,所以大循环还是用while好*/
for(g=0;g<t;g++){
count=1;//count=0;
for(i=0;i<5005;i++)
node[i].flag=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&node[i].x);
scanf("%d",&node[i].y);
}
for(i=0;i<n;i++)
for(j=i+1;j<n;j++){
if(node[i].y>node[j].y){
a=node[i].x;b=node[i].y;
node[i].x=node[j].x;node[i].y=node[j].y;
node[j].x=a;node[j].y=b;
}
else if(node[i].y==node[j].y){//==
if(node[i].x>node[j].x){
a=node[i].x;b=node[i].y;
node[i].x=node[j].x;node[i].y=node[j].y;
node[j].x=a;node[j].y=b;
}
}
}
/*for(i=0;i<n;i++){
if(node[i].flag==1)
continue;
count++;k=i;
for(j=i+1;j<n;j++)
if(node[j].x>=node[k].x&&node[j].y>=node[k].y&&node[j].flag==0){
node[j].flag=1;
k=j;
}
}*/
//for(i=0;i<n;i++)
// printf("(%d %d)\n",node[i].x,node[i].y);
for(i=0;i<n-1;i++){
if(node[i].x>node[i+1].x){
count++;
}
}
if(n==0)
printf("0\n");
else printf("%d\n",count);
}
}