编程题#9:人群的排序和分类
来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
总时间限制: 1000ms 内存限制: 1024kB
描述
对人群按照输入的信息进行排序和分类。
#include <iostream> #include <set> #include <iterator> #include <algorithm> using namespace std; // 在此处补充你的代码 int main() { int t; cin >> t; set<A*,Comp> ct; while( t -- ) { int n; cin >> n; ct.clear(); for( int i = 0;i < n; ++i) { char c; int k; cin >> c >> k; if( c == 'A') ct.insert(new A(k)); else ct.insert(new B(k)); } for_each(ct.begin(),ct.end(),Print); cout << "****" << endl; } }
输入
第一行是整数t,表明一共t组数据. t < 20
对每组数据:
第一行是整数n,表示下面一共有n行。 0 < n < 100
下面的每行代表一个人。每行以一个字母开头,代表该人所属的类别,然后跟着一个整数,代表年龄。字母只会是 'A‘或‘B' 。整数范围0到100。数据保证年龄都不相同。
输出
对每组输入数据,将这些人按年龄从小到大输出。每个人先输出类别,再输出年龄。每组数据的末尾加一行 "****"
样例输入
2 4 A 3 B 4 A 5 B 6 3 A 4 A 3 A 2
样例输出
A 3 B 4 A 5 B 6 **** A 2 A 3 A 4 ****
1 #include <iostream> 2 #include <set> 3 #include <iterator> 4 #include <algorithm> 5 using namespace std; 6 // 在此处补充你的代码 7 class A { 8 public: 9 int age; 10 string s; 11 A(int a):age(a), s("A"){} 12 A(int a, string str):age(a), s(str) {} 13 }; 14 15 class B:public A { 16 public: 17 B(int b):A(b, "B") {} 18 }; 19 20 struct Comp { 21 bool operator()(const A* a1, const A* a2) const { 22 return a1->age < a2->age; 23 } 24 }; 25 26 void Print(const A *a) { 27 cout<<a->s<<" "<<a->age << endl; 28 } 29 30 int main() 31 { 32 33 int t; 34 cin >> t; 35 set<A*,Comp> ct; 36 while( t -- ) { 37 int n; 38 cin >> n; 39 ct.clear(); 40 for( int i = 0;i < n; ++i) { 41 char c; int k; 42 cin >> c >> k; 43 44 if( c == 'A') 45 ct.insert(new A(k)); 46 else 47 ct.insert(new B(k)); 48 } 49 for_each(ct.begin(),ct.end(),Print); 50 cout << "****" << endl; 51 } 52 }