解题思路
我们先把所有的人按照月,年,到姓名的顺序排序(我用的是结构体,比较方便),这样就保证同年月的人会排在一起,for一遍碰到两个同年月的就开始输出。。懂自懂
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iomanip>
#include <cmath>
using namespace std;
bool flag;
int n;
struct c{
int b,c;
string s;
}a[200000];
bool cmp(const c&l,const c&r)//排序
{
if(l.b!=r.b)return l.b<r.b;
if(l.c!=r.c)return l.c<r.c;
if(l.s.size()!=r.s.size())
return l.s.size()<r.s.size();
return l.s<r.s;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
cin>>a[i].s>>a[i].b>>a[i].c;
sort(a+1,a+n+1,cmp);
for(int i=1;i<n;i++)
{
if(a[i].b==a[i+1].b&&a[i].c==a[i+1].c)
{
cout<<a[i].b<<" "<<a[i].c<<" "<<a[i].s;
while(a[i].b==a[i+1].b&&a[i].c==a[i+1].c)
{
flag=1,i++;
cout<<" "<<a[i].s;
}
}
cout<<endl;
}
if(!flag)cout<<"None";
}