http://acm.hdu.edu.cn/showproblem.php?pid=2037
先对结束时间进行从小到大排序
先令统计个数为1,统计对应的结束时间是排序后第一个结束时间。按结束时间从小到大寻找,
若往后结束时间对应的开始时间 > 上一个统计的结束时间,则count++,统计的结束时间更新;
这是网上别人贴的代码,用的是结构体快排:
#include <stdio.h>
#include <stdlib.h>
struct time{
int start;
int end;
} a[100];
int cmp(const void *a, const void *b){
return (*(time*)a).end-(*(time*)b).end;
}
int main(){
int n;
while(scanf("%d",&n),n){
for(int i=0;i<n;i++){
scanf("%d%d",&a[i].start,&a[i].end);
}
qsort(a,n,sizeof(a[0]),cmp);
int count=1;
int temp=0;
for(int i=1;i<n;i++){
if(a[i].start>=a[temp].end){
temp=i;
count++;
}
}
printf ("%d\n",count);
}
return 0;
}
这是自己开始时写的代码,用数组做的。
#include<stdio.h>
void maopao(int num[][2],int n){
int tmp,i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(num[i][1]>num[j][1]){
tmp=num[i][0];num[i][0]=num[j][0];num[j][0]=tmp;
tmp=num[i][1];num[i][1]=num[j][1];num[j][1]=tmp;
}
}
int main(){
int n,x[105][2];
int i,count,cmp;
while(scanf("%d",&n)!=EOF&&n){
for(i=0;i<n;i++)
scanf("%d%d",&x[i][0],&x[i][1]);
maopao(x,n);
cmp=x[0][1];
for(count=i=1;i<n;i++){
if(x[i][0]>=cmp){
count++;
cmp=x[i][1];
}
}
printf("%d\n",count);
}
return 0;
}