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 }