【贪心】XMU 1061 Ckp的约会

题目链接:

  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1061

题目大意

  n个任务(n<=1000),给定名字和开始、结束时间,求最多能完成几个任务。

题目思路:

  【贪心】

  先按照结束时间排序,之后能取就取,最后输出答案。

  

 1 //
 2 //by coolxxx
 3 //
 4 #include
 5 #include
 6 #include<string>
 7 #include
 8 #include
 9 #include
10 #include
11 #include
12 #include<string.h>
13 //#include
14 #include
15 #define min(a,b) ((a)<(b)?(a):(b))
16 #define max(a,b) ((a)>(b)?(a):(b))
17 #define abs(a) ((a)>0?(a):(-(a)))
18 #define lowbit(a) (a&(-a))
19 #define sqr(a) ((a)*(a))
20 #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
21 #define eps (1e-8)
22 #define J 10000000
23 #define MAX 0x7f7f7f7f
24 #define PI 3.1415926535897
25 #define N 1004
26 using namespace std;
27 typedef long long LL;
28 int cas,cass;
29 int n,m,lll,ans;
30 bool mark[N];
31 struct xxx
32 {
33     char name[24];
34     int st,et;
35 }a[N];
36 bool cmp(xxx aa,xxx bb)
37 {
38     return aa.et<bb.et;
39 }
40 int main()
41 {
42     #ifndef ONLINE_JUDGE
43 //    freopen("1.txt","r",stdin);
44 //    freopen("2.txt","w",stdout);
45     #endif
46     int i,j,k;
47 //    for(scanf("%d",&cas);cas;cas--)
48 //    for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
49 //    while(~scanf("%s",s))
50     while(~scanf("%d",&n))
51     {
52         for(i=1;i<=n;i++)
53         {
54             scanf("%s",a[i].name);
55             scanf("%d:%d",&j,&k);a[i].st=(j-6)*60+k;
56             scanf("%d:%d",&j,&k);a[i].et=(j-6)*60+k;
57         }
58         sort(a+1,a+1+n,cmp);
59         for(i=1,j=0;i<=n;i++)
60         {
61             if(a[i].st>=a[j].et)ans++,j=i,mark[i]=1;
62         }
63         printf("%d\n",ans);
64         for(i=1;i<=n;i++)
65             if(mark[i])printf("%s ",a[i].name);
66         puts("");
67     }
68     return 0;
69 }
70 /*
71 //
72 
73 //
74 */
千万不要点

 

转载于:https://www.cnblogs.com/Coolxxx/p/5736485.html

你可能感兴趣的:(【贪心】XMU 1061 Ckp的约会)