L1-030 一帮一
Statement
Metadata
- 作者: 陈越
- 单位: 浙江大学
- 代码长度限制: 16 KB
- 时间限制: 400 ms
- 内存限制: 64 MB
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入格式
输入第一行给出正偶数N
(N
行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。
输出格式
每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。
输入样例
输出样例
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