题很简单的。刚开始测试点1和3过不去,发现是我55~64的比较代码有问题,我原来是想循环地前后元素比较,用其中的较小值更新first_signIN或者是用较大值更新last_signOUT,这种思路有点像冒泡排序,这样一个循环下来并不能找到全体的最大最小值,只能找到最后两个元素的较大较小值。如果第1,3测试点没通过的,请看一看自己写的寻找最大最小值的代码,应该是这一部分出错了。这题真的很简单,我依旧非常喜欢从底层写起,完全不管c++已经为我们写好了很多方法...我这个习惯非常不好,得改!代码1是我写的,代码2是别人写的,应该贴出来学习!

代码1:

 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 using namespace std;
 5 struct Node{
 6     string id;
 7     string sign_in;
 8     string sign_out;
 9 };
10 int comepare_signIN(Node A,Node B)
11 {
12     int n=A.sign_in.size();
13     for(int i=0;i<n;i++)
14     {
15         if(A.sign_in[i]<B.sign_in[i])
16             return 1;
17         if(A.sign_in[i]>B.sign_in[i])
18             return -1;
19     }
20     return 0;
21 }
22 int comepare_signOUT(Node A,Node B)
23 {
24     int n=A.sign_out.size();
25     for(int i=0;i<n;i++)
26     {
27         if(A.sign_out[i]>B.sign_out[i])
28             return 1;
29          if(A.sign_out[i]<B.sign_out[i])
30             return -1;
31     }
32     return 0;
33 }
34 int main(){
35        int M;
36     cin>>M;
37        string idNum,in,out;
38        vector<Node> data;
39     Node A;
40        for(int i=0;i<M;i++)
41        {
42            cin>>idNum>>in>>out;
43         Node A;
44            A.id=idNum;
45            A.sign_in=in;
46            A.sign_out=out;
47            data.push_back(A);
48        }
49
50     if(data.size()==1)
51     {
52         cout<<data[0].id<<" "<<data[0].id;
53         return 0;
54     }
55     Node first_signIN=data[0];
56     Node last_signOUT=data[0];
57     for(int i=1;i<data.size();i++)
58     {
59         if(comepare_signIN(first_signIN,data[i])<=0)
60             first_signIN=data[i];
61
62         if(comepare_signOUT(last_signOUT,data[i])<=0)
63             last_signOUT=data[i];
64     }
65     cout<<first_signIN.id<<" "<<last_signOUT.id;
66 return 0;
67 }

其中:

55~64,我原来的写的是(显然有错):

 1     Node first_signIN=data[0];
 2     Node last_signOUT=data[0];
 3     for(int i=1;i<data.size();i++)
 4     {
 5         if(comepare_signIN(data[i-1],data[i])>=0)
 6             first_signIN=data[i-1];
 7         else
 8            first_signIN=data[i];
 9
10         if(comepare_signOUT(data[i-1],data[i])>=0)
11             last_signOUT=data[i-1];
12         else
13             last_signOUT=data[i];
14     }

代码2:

 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int m,h1,m1,s1,h2,m2,s2,t1,t2,t_in=9000000,t_out=0;scanf("%d",&m);
 5     string sign_in,sign_out,id;
 6     for(int i=0;i<m;i++){
 7         cin>>id;
 8         scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2);
 9         t1=h1*3600+m1*60+s1;t2=h2*3600+m2*60+s2;
10         if(t_in>=t1){
11             t_in=t1;sign_in=id;
12         }
13         if(t_out<=t2){
14             t_out=t2;sign_out=id;
15         }
16     }
17     cout<<sign_in<<" "<<sign_out;
18     return 0;
19 }
02-14 02:02