您的位置:首页 > 其它

水题堆1.E 今年暑假不AC (贪心)

2018-02-13 15:49 417 查看
#include <stdio.h>
#include <stdlib.h>
struct Pro
{
int start;
int end;
int t;
}pro[101],a,b;
void quicksort(struct Pro pro[],int n,int be,int e)
{
int i,j;
if(be<e){
i=be+1;
j=e;
while(i<j){
if(pro[i].end>pro[be].end){
a.t=pro[j].end;
pro[j].end=pro[i].end;
pro[i].end=a.t;
b.t=pro[j].start;
pro[j].start=pro[i].start;
pro[i].start=b.t;
j--;
}
else i++;
}
if(pro[i].end>=pro[be].end)i--;
a.t=pro[be].end;
pro[be].end=pro[i].end;
pro[i].end=a.t;
b.t=pro[be].start;
pro[be].start=pro[i].start;
pro[i].start=b.t;
quicksort(pro,n,be,i);
quicksort(pro,n,j,e);
}
}
int main()
{
int n;
while(1){
scanf("%d",&n);
if(n==0)break;
int k=0,cur,i;
for(i=0;i<=n-1;i++){
scanf("%d%d",&pro[i].start,&pro[i].end);
}
quicksort(pro,n,0,n-1);
for(i=n-2;i>0;i--){
if(pro[i].end==pro[i-1].end){
if(pro[i].start>pro[i-1].start){
a.t=pro[i].start;
pro[i].start=pro[i-1].start;
pro[i-1].start=a.t;
b.t=pro[i].end;
pro[i].end=pro[i-1].end;
pro[i-1].end=b.t;
}
}
}
k++;
cur=pro[0].end;
// printf("\n");
for(i=1;i<=n-1;i++){
if(cur<=pro[i].start){
k++;
cur=pro[i].end;
//printf("%d %d\n",pro[i].start,pro[i].end);
}
}
// printf("\n");
//for(i=0;i<=n-1;i++)printf("%d %d\n",pro[i].start,pro[i].end);
printf("%d\n",k);
}
return 0;
}
这个题思路就是每选一个节目,都要找当前情况下结束最早的。这个题当时写的时候有点迷糊,主要是对结构体
还有点陌生,很少用。最后写完运行没有error还是很惊喜的233333
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: