图灵普及题目挂0,求调

题目链接:家族迁徙
代码:

#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排序

建议你先把每个鱼的身份信息先算出来,再排序