1006. Sign In and Sign Out (25)

 

(1)思路

就是简单的排序不过这里数据比较弱,用cin和cout没有超时 

 

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;
struct re{
  string id;
  string in;
  string out;
};
bool cmp1(re r1,re r2){ return r1.in < r2.in;}
bool cmp2(re r1,re r2){ return r1.out > r2.out;}
int main() {
  int n;
  scanf("%d",&n);
  vector<re> re_v(n);
  for(int i=0;i<n;i++) {
    cin>>re_v[i].id>>re_v[i].in>>re_v[i].out;
  }
  sort(re_v.begin(),re_v.end(),cmp1);
  cout<<re_v[0].id<<" ";
  sort(re_v.begin(),re_v.end(),cmp2);
  cout<<re_v[0].id;
  return 0;
}

 

 

 

(2)  也可以直接将时间转换成秒来比较大小并找到最找来的人的编号,和最晚走的人的编号 

#include <cstdio>
#include <string>
#include <iostream>
#include <climits>
using namespace std;

int main() {
  int n;
  scanf("%d",&n);
  string locked,unlock;
  int min_in=INT_MAX;
  int max_out=INT_MIN;
  for(int i=0;i<n;i++) {
    string t;
    cin>>t;
    int h1,h2,m1,m2,s1,s2;
    scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2);
    int tem_sec1=h1*3600+m1*60+s1;
    int tem_sec2=h2*3600+m2*60+s2;
    if(tem_sec1 < min_in) {
      unlock=t;
      min_in=tem_sec1;
    }
    if(tem_sec2 > max_out) {
      locked=t;
      max_out=tem_sec2;
    }
  }
  cout<<unlock<<" "<<locked;
  return 0;
}

 

 

posted @ 2018-03-22 14:30  lan126  阅读(122)  评论(0编辑  收藏  举报