一开始测试点345都没有通过是因为把int last=n-row*(k-1);写成 last=n-k*(row-1) -,-
乙级的集体照我是按左边pos做的循环,然后这次感觉用右边pos做比较好些啊,不用怎么分情况~
#include<bits/stdc++.h>
using namespace std;
const int maxn=10010;
struct Node{
int height;
string name;
}node[maxn];
bool cmp(Node a,Node b){
if(a.height!=b.height) return a.height>b.height;
else return a.name<b.name;
}
string ans[maxn];
int main(){
int n,k;
cin>>n>>k;
int row=n/k;//行数k,每行人数row
for(int i=0;i<n;i++){
cin>>node[i].name>>node[i].height;
}
sort(node,node+n,cmp);
int last=n-row*(k-1);
int cnt=0;
for(int i=0;i<k;i++){
int num=row;
if(i==0) num=last;
int mid=num/2;//middle de position
ans[mid]=node[cnt++].name;
int right=mid+1;
while(r