1. 程式人生 > 其它 >【YBTOJ】生日相同

【YBTOJ】生日相同

技術標籤:題解

在這裡插入圖片描述

思路

直接暴力分類,在同一天生日的人裡做插排,在整個人群裡面做快排

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; }