1028 人口普查 (20 分)

题目链接:1028 人口普查 (20 分)

 

这道题目刚开始用了cin处理字符串,果然有一个测试点运行超时。

后来改为是scanf,这个测试点通过。

另外思维要缜密。

有一个测试点为段错误。仔细检查以后发现ans.size()-1数组溢出,因为ans.size()可能为0。加个判断之后即可。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 struct Node
 5 {
 6     char name[11];
 7     char date[11];
 8 }a;
 9 bool cmp(Node a,Node b)
10 {
11     if(strcmp(a.date,b.date)<0)
12         return true;
13     else
14         return false;
15 }
16 vector<Node> ans;
17 int main()
18 {
19     char name[11],date[11];
20     char mindate[]="1814/09/06";
21     char maxdate[]="2014/09/06";
22     int n;
23     cin>>n;
24     int count=n;
25     for(int i=0;i<n;i++)
26     {
27         scanf("%s %s",name,date);
28         if(strcmp(date,mindate)<0||strcmp(date,maxdate)>0)
29             count--;
30         else
31         {
32             strcpy(a.name,name);
33             strcpy(a.date,date);
34             ans.push_back(a);
35         }    
36     }
37     if(ans.size()!=0)
38       {
39           sort(ans.begin(),ans.begin()+ans.size(),cmp);
40           cout<<count<<" "<<ans[0].name<<" "<<ans[ans.size()-1].name<<endl;
41       }
42       else
43            cout<<count<<endl;
44     return 0;
45 } 

 

posted @ 2019-01-14 15:53  focusDing  阅读(693)  评论(0编辑  收藏  举报