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 } 

 

转载于:https://www.cnblogs.com/ManOK/p/10267287.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值