资深光能
题目描述 Description
酷町堂共有n个学生,现统计每位学生的出生年月日,试找出所有同年同月同日生的学生,并输出出来。
输入描述 Input Description
输入为n+1行:
第一行为酷町堂的学生数n(n≤100);
之后的n行为酷町堂学员的姓名以及出生年(其中年份在01年以后)、月、日,中间用单个空格隔开。
输出描述 Output Description
输出每一行为每一组生日相同的学生,其中前三个数字表示出生年、月、日,之后为生日相同的学生姓名。对于所有的输出,年月日按照从日历从前到后的顺序输出,对于生日相同的学生姓名,按照姓名从短到长的顺序输出,如果长度相同,则按照字典序输出。如果没有生日相同的学生,则输出“No”。
样例输入 Sample Input
6 Liudehua 05 3 2 Zhoujielun 05 4 5 Chenyixue 05 3 2 Huge 05 4 5 Liuyifei 05 3 2 Wanglihong 06 3 2
样例输出 Sample Output
05 3 2 Liudehua Liuyifei Chenyixue 05 4 5 Huge Zhoujielun
25分:
#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
struct m{
string name;
string y;
int m,d;
}f[105];
bool b[105];
bool cmp(string a,string b){
if(a.size()!=b.size()){
return a.size()<b.size();
}
return a<b;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>f[i].name>>f[i].y>>f[i].m>>f[i].d;
}
int ans=0;
for(int i=1;i<=n;i++){
string s[105];
int cnt=0;
if(b[i]==0){
for(int j=1;j<=n;j++){
if(b[j]==0){
if(f[i].y==f[j].y){
if(f[i].m==f[j].m){
if(f[i].d==f[j].d){
b[j]=1;
s[cnt++]=f[j].name;
}
}
}
}
}
b[i]=1;
if(cnt>1){
cout<<f[i].y<<' '<<f[i].m<<' '<<f[i].d<<' ';
sort(s,s+cnt,cmp);
for(int j=0;j<cnt;j++){
cout<<s[j]<<' ';
}
cout<<endl;
ans=1;
}
}
}
if(ans==0){
cout<<"No";
}
return 0;
}
周明轩在2020-08-31 21:20:19追加了内容
@王子健 @李瑞曦 @沈峻宇
初级守护
cmp错了
bool cmp(node x,node y){
if(x.a!=y.a){
return x.a<y.a;
}
if(x.b!=y.b){
return x.b<x.b;
}
if(x.c!=y.c){
return x.c<y.c;
}
if(x.s.size()!=y.s.size()){
return x.s.size()<y.s.size();
}
return x.s<y.s;
}