WA,挂0求条

题目:

时间限制: 1000ms

空间限制: 524288kB

题目描述

由于环境破坏,导致了鱼大大家的环境不再适合居住。鱼大大家族需要举族迁徙。为了路途上的安全,鱼大大需要合理地将族人排队迁徙。鱼大大要求所有家族成员报上身份信息号码。以此提取有效信息进行排队。鱼大大家族的身份信息号码是18位身份证号码+2~7位能力数值组成的长度为20 ~ 25的纯数字串。

其中的数字含义如下:
前6位为该鱼出生所在的区域。
第7位~第10位为该鱼出生年份。
第11位~第14位为该鱼出生日期。
第15位~第16位为该鱼出生编号。
第17位为该鱼的性别。(奇数为男,偶数为女)
第18位为该鱼身份证号码的识别信息。
第19位到末尾的数字为该鱼的能力数值。

经过深思熟虑后,鱼大大认为在他的带领下,按以下的排队顺序迁徙是最安全的。
1、小孩子安排在队伍的最前面,其中年龄越小越靠前。
2、老年鱼紧跟其后排在中间,其中年龄越大越靠前。
3、成年鱼则在最后,根据女士优先原则,让所有女性排在男性前面,其中年龄越小的女性越靠前,而男性则是根据其能力先后排队,能力越大则越靠后。(其中年龄只按年份计算,当前年份(2000) - 出生年份即为年龄,小于100为小孩子,大于1000为老年鱼,其余为成年。若是小孩子、老年鱼、成年女性年龄相等,就按报到顺序先后排队,若是成年男性能力相等,则按报到顺序先后排队)

现在请你帮忙一起安排队伍的先后顺序,并将排好的队伍输出。

输入格式

第一行一个整数n,表示为鱼大大家族的成员人数接下来n行,每行两个字符串,分别表示该成员的姓名(长度不超过20),和该成员的身份信息号码(长度不超过25)。

输出格式

n行,每行一个字符串,分别为排好队的每位成员姓名

样例

Input 1

8 
hong 29534619900123913540 
ming 83982410631204861785 
huan 33100305430101003403 
feng 33100312340101003403 
shyg 93420319501231380867 
lbao 32687800510512982085 
FijK 32687111111111982085 
CSRO 84758117870908934072

Output 1

hong 
shyg 
lbao 
huan 
CSRO 
FijK 
feng 
ming

样例解释

其中hong和shyg为小孩,按年龄排序,分别为10岁和50岁,顺序为hong、shyg。再是lbao和huan为老年,按年龄排序,分别为1949岁和1457岁,顺序为lbao、huan。其余为成年,先按性别排序,其中女性按年龄排序,顺序为CSRO213岁,FijK889岁。再是男性按能力数值排序,顺序为feng能力3,ming能力85.最终顺序为hong、shyg、lbao、huan、CSRO、FijK、feng、ming

数据范围

对于所有数据,出生年份<2000对于20%的数据,n ≤ 10对于100%的数据,n ≤ 1000

代码

#include<bits/stdc++.h>
using namespace std;
struct fish{
    string name;
    int age,sex,order,able=0;
}a[1001];
bool cmp(fish n,fish m){
    if(n.age<100||m.age<100){
    	if(n.age==m.age)return n.order<m.order;
    	return n.age<m.age;
	}if(n.age>1000||m.age>1000){
		if(n.age==m.age)return n.order<m.order;
    	return n.age<m.age;
	}if(n.sex!=m.sex)return n.sex<m.sex;
    if(n.sex==0){
    	if(n.age==m.age)return n.order<m.order;
    	return n.age<m.age;
	}if(n.able==m.able)return n.order<m.order;
	return n.able<m.able;
}int main(){
    int n;
    string s;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i].name>>s;
		a[i].age=2000-s[6]*1000-s[7]*100-s[8]*10-s[9]+'0'*1111;
		for(int j=10;j<16;j++)a[i].age=a[i].age*10+s[i]-'0';
		a[i].sex=(s[16]-'0')%2;
		a[i].order=i;
		for(int i=18;i<s.size();i++)a[i].able=a[i].able*10+s[i]-'0';
    }sort(a,a+n,cmp);
    for(int i=0;i<n;i++)cout<<a[i].name<<"\n";
    return 0;
}
1 个赞

[quote=“黄飞栋, post:1, topic:30290, username:huangfeidong”]
,FijK889岁。再是男性按能力数值排序,顺序为feng能力3,ming能力85.最终顺序为hong、shyg、lbao、huan、CSRO、FijK、feng、ming

数据范围

对于所有数据,出生年份<2000对于20%的数据,n ≤ 10对于100%的数据,n ≤ 1000

1 个赞

别发 AC 代码!!!!!你是想自己删还是我帮你删(限时 7 分钟) @jhxs1516

3 个赞

这里有一个新的代码:

#include<bits/stdc++.h>
using namespace std;
struct fish{
	string name;
	int age=0,sex,able=0,num;
}a[1001];
bool cmp(fish x,fish y){
	if(x.age<100||y.age<100){
		if(x.age==y.age)return x.num<y.num;
		return x.age<y.age;
	}if(x.age>1000||y.age>1000){
		if(x.age==y.age)return x.num<y.num;
		return x.age>y.age;
	}if(x.sex!=y.sex)return x.sex<y.sex;
	if(x.sex==0){
		if(x.age==y.age)return x.num<y.num;
		return x.age<y.age;
	}if(x.able==y.able)return x.num<y.num;
	return x.able<y.able;
}int main(){
	int n;
	string s;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i].name>>s;
		a[i].num=i;
		for(int i=6;i<10;i++)a[i].age=a[i].age+s[i]-'0';
		a[i].age=2000-a[i].age;
		a[i].sex=s[16]%2;
		for(int i=18;i<s.size();i++)a[i].able=a[i].able*10+s[i]-'0';
	}sort(a,a+n,cmp);
	for(int i=0;i<n;i++)cout<<a[i].name<<"\n";
	return 0;
}

还是0分

就不能看一下吗