【YbtOJ高效进阶 字符串-5】生日相同

链接

YbtOJ高效进阶 字符串-5

题目描述

在一个大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。

样例输入

6
Avril 3 2
Candy 4 5
Tim 3 2
Sufia 4 5
Lagrange 4 5
Bill 3 2

样例输出

3 2 Tim Bill Avril
4 5 Candy Sufia Lagrange

思路

读入每个人的生日,按生日排序,然后一个个比较,输出就可以了

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<string> 
#include<cstdio>

using namespace std;

struct stu
{
    
    
	string name;
	int m, d;	
}a[1000005];

int n;

bool cmp(stu i, stu j)
{
    
    
	if(i.m != j.m) return i.m < j.m;
	if(i.d != j.d) return i.d < j.d;
	if(i.name.size() != j.name.size()) 
		return i.name.size() < j.name.size();
	return i.name < j.name;
}

int main()
{
    
    
	cin>>n;
	for(int i = 1; i <= n; ++i)
		cin>>a[i].name>>a[i].m>>a[i].d;
	sort(a + 1, a + n + 1, cmp);
	for(int i = 1; i <= n; ++i)
	{
    
    
		if(a[i].m == a[i + 1].m && a[i].d == a[i + 1].d) {
    
    
			cout<<a[i].m<<' '<<a[i].d<<' '<<a[i].name<<' ';
			while(a[i].m == a[i + 1].m && a[i].d == a[i + 1].d) {
    
    
				i++;
				cout<<a[i].name<<' ';
			}
			cout<<endl;
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/LTH060226/article/details/114433417
今日推荐