首页 > 学院 > 开发设计 > 正文

PAT 1109

2019-11-06 08:17:07
字体:
来源:转载
供稿:网友

模拟题,题意是给你n个人的名字和身高,将其排成k行,然后最高的站中间,每个人左边比右边身高高,然后将其输出

#include<stdio.h>#include<iostream>#include<algorithm>#include<queue>#include<string>#include<string.h>#include<stack>using namespace std;struct Team {	string name;	int high;}s[10005];int cmp(const Team& a, const Team& b){	if (a.high != b.high)		return a.high<b.high;	else		return a.name>b.name;}int main() {	int n, k, mod, t;	int ans[11][10005];	int col[11];	scanf("%d %d", &n, &k);	for (int i = 0; i < n; i++) {		cin >> s[i].name >> s[i].high;	}	sort(s, s + n, cmp);	t = n / k;	int l, r;	t = n / k;	for (int i = 1; i <= k; i++) {		l = (i - 1)*t;		r = i*t - 1;		if (i == k) {			t = n - (k - 1)*t;			r = n - 1;		}		col[i] = t;		int mid = t / 2 + 1;		int index = r;		ans[i][mid] = index;		index--;		int ll = mid - 1, rr = mid + 1;		while (rr <= t) {			ans[i][ll] = index;			index--;			ans[i][rr] = index;			index--;			ll--, rr++;		}		if (ll == 1) {			ans[i][ll] = index;		}	}	for (int i = k; i >= 1; i--) {		for (int j = 1; j <= col[i]; j++) {			if (j == 1) {				cout << s[ans[i][j]].name;			}			else {				cout << " " << s[ans[i][j]].name;			}		}		cout << endl;	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表