模拟题,题意是给你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; }}
新闻热点
疑难解答