POJ C++程序设计 编程题#9:人群的排序和分类

编程题#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 }

 

posted @ 2015-09-23 20:42  dagon  阅读(1109)  评论(0编辑  收藏  举报