【ybtoj 高效进阶 2.1】E.生日相同【字符串】

在这里插入图片描述
在这里插入图片描述

分析

先按生日日期排序,第二关键字是名字长度

然后直接考虑生日日期不同的。如果一直是同月同日就一直输出名字,遇到不是同月同日的就换行输出日期再跟着输出名字。

上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct lwx//My struct is a dog
{
	string name;
	int month,day;
	bool operator<(const lwx& a)const{
        if(month!=a.month) return month<a.month;
        if(day!=a.day) return day<a.day;  //排序
        if(name.length()!=a.name.length()) return name.length()<a.name.length();  
        return name<a.name;
    }
}a[100001];
int n,k;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].name>>a[i].month>>a[i].day;
	}
	sort(a+1,a+n+1); 
	int nxm=a[1].month,nxd=a[1].day;
	for(int i=2;i<=n;i++)
	{
		if(nxm!=a[i].month||nxd!=a[i].day)
		{
			nxm=a[i].month;
			nxd=a[i].day; 
		}
		else k++;
	}
	if(k)
	{
		cout<<a[1].month<<' '<<a[1].day<<' ';
		cout<<a[1].name<<' ';
		nxm=a[1].month;
		nxd=a[1].day;
		for(int i=2;i<=n;i++)
		{
			if(a[i].month!=nxm||a[i].day!=nxd)
			{
				cout<<endl;
				cout<<a[i].month<<' '<<a[i].day<<' ';
				cout<<a[i].name<<' ';
				nxm=a[i].month;
				nxd=a[i].day;
			}
			else
			{
				cout<<a[i].name<<' ';
			}
		}
	}
	else
	{
		cout<<"None";
	}
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值