Skip to content

L1-030 一帮一

Statement

Metadata

  • 作者: 陈越
  • 单位: 浙江大学
  • 代码长度限制: 16 KB
  • 时间限制: 400 ms
  • 内存限制: 64 MB

“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

输入格式

输入第一行给出正偶数N\le50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

输出格式

每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

输入样例

8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda

输出样例

Amy Jack
Tom Linda
Bill Maya
Cindy John

Solution

#include <ctype.h>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>

using namespace std;
typedef long long LL;

const double PI = 3.14159265358979323846264338327;
const double E = 2.718281828459;
const double eps = 1e-6;

const int MAXN = 0x3f3f3f3f;
const int MINN = 0xc0c0c0c0;
const int maxn = 1e5 + 5;
const int MOD = 1e9 + 7;

struct Node {
    string name;
    int sex;
} temp;

int main() {
    int n;
    cin >> n;
    vector<Node> F, M, V;
    F.clear();
    M.clear();
    V.clear();
    for (int i = 0; i < n; i++) {
        cin >> temp.sex >> temp.name;
        if (temp.sex == 1)
            M.push_back(temp);
        else
            F.push_back(temp);
        V.push_back(temp);
    }
    n /= 2;
    for (int i = 0; i < n; i++) {
        if (V[i].sex == 1) {
            cout << V[i].name << " " << F[F.size() - 1].name << endl;
            F.pop_back();
        } else {
            cout << V[i].name << " " << M[M.size() - 1].name << endl;
            M.pop_back();
        }
    }
}

Last update: May 4, 2022
Back to top