昆明做网站报价如何建立网上销售平台
有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?
Input
第一行一个正整数n (n <= 10000)代表活动的个数。 第二行到第(n + 1)行包含n个开始时间和结束时间。 开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
Output
一行包含一个整数表示最少教室的个数。
Input示例
3 1 2 3 4 2 9
Output示例
2
这道题目可以考虑将每个活动按照开始时间进行升序排列,如果活动开始时间相同,则按照活动结束时间进行降序排列。
这道题设计两个结构体,一个结构体用来记录活动骑士时间,一个结构体用来记录教室信息。
上述两点处理好了之后,接下来就是简单的模拟过程了。
#include <stdio.h>struct Info
{int s;int e;
};struct Room
{int s;int e;int num;
};struct Info task[10010];
struct Room room[10010];void sort(int n)
{int i,j;for(i=0;i<n;i++){for(j=0;j<n-i-1;j++){if(task[j+1].s<task[j].s){struct Info temp=task[j];task[j]=task[j+1];task[j+1]=temp;}else if(task[j+1].s==task[j].s){if(task[j+1].e<task[j].e){struct Info temp=task[j];task[j]=task[j+1];task[j+1]=temp;}}}}
}
int main()
{int s_time,e_time=0;int n;scanf("%d",&n);int i,j;for(i=0;i<n;i++){scanf("%d %d",&task[i].s,&task[i].e);}sort(n);int ans=1;room[0].s=task[0].s;room[0].e=task[0].e;for(i=1;i<n;i++){int flag=0;for(j=0;j<ans;j++){if(task[i].s>=room[j].e){room[j].s=task[i].s;room[j].e=task[i].e;flag=1;break;}}if(flag==0){ans++;room[ans-1].s=task[i].s;room[ans-1].e=task[i].e;}}printf("%d\n",ans);return 0;
}