题目
https://pintia.cn/problem-sets/994805342720868352/problems/994805360043343872
题目分析
题目分析推荐参考文章中柳神的思路,写的很详细
AC代码
#include<bits/stdc++.h>
using namespace std;
map<string,int> h;
bool cmp(string a,string b){
return h[a]!=h[b]?h[a]>h[b]:a<b;
}
int main()
{
int n,k,tmp;
cin>>n>>k;
vector<string> v(n);
for(int i=0;i<n;i++)
{
cin>>v[i]>>tmp;
h[v[i]]=tmp;
}
sort(v.begin(),v.end(),cmp);
int t=0,row=k,m;
while(row)
{
m = row==k?(n/k+n%k):n/k;
string ans[m];
ans[m/2]=v[t];
int j=m/2-1;
for(int i=t+1;i<t+m;i+=2)
ans[j--]=v[i];
j=m/2+1;
for(int i=t+2;i<t+m;i+=2)
ans[j++]=v[i];
for(int i=0;i<m;i++)
{
if(i) cout<<" ";
cout<<ans[i];
}
cout<<endl;
t+=m;
row--;
}
}