中级守护
1491 同年同月同日生
经验值:1200 时间限制:1000毫秒
题目描述 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
62分代码:
#include<bits/stdc++.h>
using namespace std;
struct f
{
int n,y,r;
string s;
}a[10001];
bool cmp(f x,f y)
{
if(x.n!=y.n)
return x.n<y.n;
else if(x.y!=y.y)
return x.y<y.y;
else if(x.r!=y.r)
return x.r<y.r;
else if(x.s.size()!=y.s.size())
return x.s.size()<y.s.size();
return x.s<y.s;
}
int main()
{
long long n,c[1000001]={0},t=0;
string b[10001];
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].n>>a[i].y>>a[i].r;
c[a[i].n*100+a[i].y*10+a[i].r]++;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++)
{
if(c[a[i].n*100+a[i].y*10+a[i].r]>1){
t=1;
if(a[i].n/10!=0)
cout<<a[i].n;
else cout<<"0"<<a[i].n;
cout<<" "<<a[i].y<<" "<<a[i].r<<" ";
for(int j=i;j<i+c[a[i].n*100+a[i].y*10+a[i].r];j++)
cout<<a[j].s<<" ";
cout<<endl;
i+=c[a[i].n*100+a[i].y*10+a[i].r]-1;
}
}
if(t==0)
cout<<"No";
return 0;
}
胡靖坤在2021-07-31 22:29:51追加了内容
已解决
5楼采纳
胡靖坤在2021-08-01 08:17:47追加了内容
没人吗!!!!!!!!!!!!!!!!!!
胡靖坤在2021-08-01 08:18:29追加了内容
那就随机采纳