原题链接:
Contest Login
思路参考:
大佬博客
基本上代码照搬,大佬的思路比官方题解简单
代码:
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
void solve()
{
map<int,int>mp;
int n,k;
cin>>n>>k;
vector<int>ve;
bool first=true;
for(int i=0;i<n;i++)
{
int t;
cin>>t;
ve.push_back(t);
}
if(k>=n)
{
sort(ve.begin(),ve.end(),greater<int>());
for(auto t:ve)
{
if(!first)
{
cout<<' ';
}
first=false;
cout<<t;
}
cout<<endl;
}
else
{
vector<int>b;
b=ve;
sort(b.begin(),b.end());
for(int i=0;i<k;i++)
{
mp[b[i]]++;
}
for(int i=0;i<n;i++)
{
if(mp[ve[i]]!=0)
{
mp[ve[i]]--;
continue;
}
if(!first)
{
cout<<' ';
}
first=false;
cout<<ve[i];
}
for(int i=k-1;i>=0;i--)
{
if(!first)
{
cout<<' ';
}
first=false;
cout<<b[i];
}
cout<<endl;
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
solve();
}
}
这篇博客介绍了如何解决算法竞赛中的一道题目,涉及数组排序和特殊情况处理。当给定一个整数数组和一个整数k,如果k大于等于数组长度,需要将数组元素按降序输出;否则,先输出出现次数大于0的元素,然后输出剩余的k个最小元素。代码主要采用C++实现,通过映射和排序来达到目标。
167

被折叠的 条评论
为什么被折叠?



