3.1資料結構之結構 6377 生日相同 2.0
阿新 • • 發佈:2018-12-18
- 總時間限制:
- 1000ms
- 記憶體限制:
- 65536kB
- 描述
-
在一個有180人的大班級中,存在兩個人生日相同的概率非常大,現給出每個學生的名字,出生月日。試找出所有生日相同的學生。
- 輸入
- 第一行為整數n,表示有n個學生,n ≤ 180。此後每行包含一個字串和兩個整數,分別表示學生的名字(名字第一個字母大寫,其餘小寫,不含空格,且長度小於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
//http://noi.openjudge.cn/
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; struct Person{ string name; int mon,day; }Stu[181]; int compare(const Person &a,const Person &b) { if(a.mon!=b.mon)return a.mon<b.mon; if(a.day!=b.day)return a.day<b.day; if(a.name.size()==b.name.size())return a.name<b.name; return a.name.size()<b.name.size(); } int main() { //freopen("st.in","r",stdin), //freopen("st.out","w",stdout); int n,book[13][33]={0},b=0; cin>>n; for(int i=1;i<=n;i++) cin>>Stu[i].name>>Stu[i].mon>>Stu[i].day; sort(Stu+1,Stu+1+n,compare); for(int i=1;i<=n;i++) if(Stu[i].mon==Stu[i+1].mon&&Stu[i].day==Stu[i+1].day&&book[Stu[i].mon][Stu[i].day]==0) { if(b)cout<<endl; b=1; cout<<Stu[i].mon<<" "<<Stu[i].day<<" "<<Stu[i].name; book[Stu[i].mon][Stu[i].day]=1; } else if(book[Stu[i].mon][Stu[i].day]==1) cout<<" "<<Stu[i].name; if(!b)cout<<"None"; return 0; }