问题标题: 酷町堂:1949

0
0
已解决
胡靖坤
胡靖坤
中级守护
中级守护

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追加了内容

那就随机采纳


0
3
2
1
1
王文博
王文博
缔造者之神
缔造者之神

这道题我第一眼看出代码的问题就是:全部要用string

1
1
1
0
0
0
0
0
我要回答