题很简单的。刚开始测试点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 }