【YBTOJ】生日相同
阿新 • • 發佈:2021-01-23
技術標籤:題解
思路
直接暴力分類,在同一天生日的人裡做插排,在整個人群裡面做快排
c o d e code code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n, m;
string s[100010];
int a[10010], b[10010];
struct node
{
string s[510];
int a, b, tot;
}name[10010];
bool cmp(node x, node y)
{
if(x.a!=y.a)
return x.a<y.a;
else if(x.b!=y.b)
return x.b<y.b;
}
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>s[i];
cin>>a[i]>>b[i];
bool flag=0;
for(int j=1; j<=m; j++)
{
if(name[j].a==a[i]&&name[j].b==b[i])
{
flag= 1;
name[j].tot++;
name[j].s[name[j].tot]=s[i];
for(int k=name[j].tot-1; k>=1; k--)
{
if(name[j].s[k+1].size()>name[j].s[k].size())
break;
else if(name[j].s[k+1].size()==name[j].s[k].size()&&name[j].s[k+1]>name[j].s[k])
break;
swap(name[j].s[ k+1], name[j].s[k]);
}
break;
}
}
if(flag==0)
{
name[++m].tot=1;
name[m].a=a[i], name[m].b=b[i];
name[m].s[1]=s[i];
}
}
sort(name+1, name+1+m, cmp);
for(int i=1; i<=m; i++)
{
cout<<name[i].a<<' '<<name[i].b;
for(int j=1; j<=name[i].tot; j++)
cout<<' '<<name[i].s[j];
cout<<endl;
}
return 0;
}