您的位置:首页 > 其它

蓝桥杯 算法提高 身份证排序

2017-10-06 13:12 225 查看
  算法提高 身份证排序  

时间限制:1.0s   内存限制:256.0MB
    

问题描述

  安全局搜索到了一批(n个)身份证号码,希望按出生日期对它们进行从大到小排序,如果有相同日期,则按身份证号码大小进行排序。身份证号码为18位的数字组成,出生日期为第7到第14位

输入格式

  第一行一个整数n,表示有n个身份证号码

  余下的n行,每行一个身份证号码。

输出格式

  按出生日期从大到小排序后的身份证号,每行一条

样例输入

5

466272307503271156

215856472207097978

234804580401078365

404475727700034980

710351408803093165

样例输出

404475727700034980

234804580401078365

215856472207097978

710351408803093165

466272307503271156

数据规模和约定

  n<=100000

注意审题!!!!

1.希望按出生日期对它们进行从大到小排序

2.如果有相同日期,则按身份证号码大小进行排序。

3.身份证号码为18位的数字组成,出生日期为第7到第14位

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int cmp(string a,string b){
string suba=a.substr(6,8);  //获取a的字串,从第六个字符起长度为8,注意下标从0开始。
string subb=b.substr(6,8);   //同理
if(suba>subb)          //降序排序
return 1;
else if(suba<subb)
return 0;
else
return a>b;
}
int main()
{
int n,i;         //n个身份证号码
cin >>n;
string s;
vector<string>vs;
vs.reserve(n);  //还可以预先分配容量,提高效率
for(i=0;i<n;i++){
cin >>s;
vs.push_back(s);
}
sort(vs.begin(),vs.end(),cmp); //sort()函数第三个参数省略的话默认是升序,如果不省略 ,就是自己另写一个比较函数,注意不用cmp(),而是cmp。
for(i=0;i<n;i++){
cout <<vs[i]<<endl;
}
return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息