题目链接:家族迁徙
代码:
#include<bits/stdc++.h>
using namespace std;
struct fish{
string s,c;
}a[1001];
bool cmp(fish x,fish y){
int date1=0,date2=0,able1=0,able2=0;
for(int i=6;i<10;i++)date1=date1*10+x.c[i]-'0';
for(int i=6;i<10;i++)date2=date2*10+y.c[i]-'0';
date1=2000-date1;
date2=2000-date2;
if(min(date1,date2)<100||max(date1,date2)>1000){
if(date1==date2){
for(int i=10;i<13;i++)date1=date1*10+x.c[i]-'0';
for(int i=10;i<13;i++)date2=date2*10+y.c[i]-'0';
return date1<date2;
}return date1<date2;
}if(x.c[16]%2!=y.c[16]%2)return x.c[16]%2<y.c[16]%2;
if(x.c[16]%2==0&&y.c[16]%2==0){
if(date1==date2){
for(int i=10;i<13;i++)date1=date1*10+x.c[i]-'0';
for(int i=10;i<13;i++)date2=date2*10+y.c[i]-'0';
return date1<date2;
}return date1<date2;
}for(int i=18;i<x.c.size();i++)able1=able1*10+x.c[i]-'0';
for(int i=18;i<y.c.size();i++)able2=able2*10+y.c[i]-'0';
return able1<able2;
}int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i].s>>a[i].c;
sort(a,a+n,cmp);
for(int i=0;i<n;i++)cout<<a[i].s<<"\n";
return 0;
}
思路:在比较函数cmp里面计算出谁要先排在前面,再用sort排序