题意:
拍照片,让你根据升高排队,题好难读。
思路:
sort一遍,我把行列搞错了... ... ...以致数组大小估计错误。
代码:
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <stack>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
using namespace std;
typedef long long ll;
const int N = 1e4+50;
const double eps = 1.e-8;
int n, hei, k;
char x[10];
struct node {
int h;
char name[10];
}a[N];
int c[N];
bool cmp (node aa, node bb) {
if (aa.h == bb.h)
return strcmp(aa.name, bb.name) < 0;
return aa.h > bb.h;
}
int main() {
cin>>n>>k;
for (int i = 0; i < n; i++) {
scanf("%s%d", &x, &hei);
a[i].h = hei;
strcpy(a[i].name, x);
}
sort(a, a+n, cmp);
//for (int i = 0; i < n; i++) cout<<a[i].name<<" "<<a[i].h<<endl;
int lie = n / k;
int res = n % lie;
int th = 0;
for (int i = 0; i < k; i++) {//made a mistake in row and column. takes me more than 25 minutes to check
int r = lie;
if (i < res) r++;
int left = r/2+1;
int right = r/2+1;
int j = 0;
for(int p = 0; p < r; p++) {
if (j == 0) {
c[right++] = th++;
j = 1;
}
else {
c[--left] = th++;
j = 0;
}
}
for (int p = 1; p <= r; p++) {//注意这里开一维的,二维1e4 * 1e4要炸,要么用容器
int q = c[p];
printf("%s", a[q].name);
if (p == r) printf("\n");
else printf(" ");
}
}
return 0;
}