CF1833B
由于题目保证有解,因此可以保证一定不超过 \(k\),可以忽略这个条件。要使得 $ |a_i - b_i| $ 最小,很容易想到贪心做法,将 \(a\) 和 \(b\) 分别排序,将位置相同的两个作为一对计算答案。显然这种做法能保证答案最小,证明过程不详解。
代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,k,c[1000001];
struct d
{
int v;
int id;
}a[1000001],b[1000001];
bool cmp( d x , d y )
{
return x.v < y.v;
}
int main()
{
int T;
cin >> T;
while( T -- )
{
cin >> n >> k;
for( int i = 1 ; i <= n ; i ++ )
cin >> a[i].v,a[i].id = i;
for( int i = 1 ; i <= n ; i ++ )
cin >> b[i].v,b[i].id = i;
sort( a + 1 , a + n + 1 , cmp );
sort( b + 1 , b + n + 1 , cmp );
for( int i = 1 ; i <= n ; i ++ )
c[a[i].id] = b[i].v;
for( int i = 1 ; i <= n ; i ++ )
cout << c[i] << ' ';
cout << endl;
}
return 0;
}
还是菜。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架