2904: 【例64.2】 生日相同
内存限制:64 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:2
解决:2
题目描述
在一个有$180$人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。
试找出所有生日相同的学生。
试找出所有生日相同的学生。
输入
第一行为整数$n$,表示有$n$个学生,$n≤180$。
此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于$20$)和出生月($1≤m≤12$)日($1≤d≤31$)。
名字、月、日之间用一个空格分隔。
此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于$20$)和出生月($1≤m≤12$)日($1≤d≤31$)。
名字、月、日之间用一个空格分隔。
输出
每组生日相同的学生,输出一行,其中前两个数字表示月和日,后面跟着所有在当天出生的学生的名字,数字、名字之间都用一个空格分隔。
对所有的输出,要求按日期从前到后的顺序输出。
对生日相同的名字,按名字从短到长按序输出,长度相同的按字典序输出。
如没有生日相同的学生,输出"
对所有的输出,要求按日期从前到后的顺序输出。
对生日相同的名字,按名字从短到长按序输出,长度相同的按字典序输出。
如没有生日相同的学生,输出"
None
"。
样例输入 复制
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<bits/stdc++.h> using namespace std; int n,m,d; string name; bool flag; vector<string> a[13][32]; bool cmp(string x,string y){ return x.size()<y.size()||x.size()==y.size()&&x<y; } int main(){ flag=false; cin>>n; for(int i=1;i<=n;i++){ cin>>name>>m>>d; a[m][d].push_back(name); } for(int i=1;i<=12;i++){ for(int j=1;j<=31;j++){ if(a[i][j].size()>=2){ flag=true; cout<<i<<" "<<j<<" "; sort(a[i][j].begin(),a[i][j].end(),cmp); for(int k=0,len=a[i][j].size();k<len;k++){ cout<<a[i][j][k]<<" "; } cout<<endl; } } } if(!flag) cout<<"None"<<endl; return 0; }