Knowledge Test about Match
思路:肯定先无脑sort一下,主基调是从小到大,但是会存在非最优解(1,2)最优解应该是(2,1) 。
因此再暴力匹配最优解,差不多3次暴力匹配就可以从局部最优解得到全局最优解。
至于为什么,不清楚。。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include <algorithm>
#include<stack>
#include <math.h>
using namespace std;
#define ll long long
const int maxn=2000+10;
struct node {
int x, pos;
};
int n;
int a[maxn];
double st[maxn];
double cal(int a, int b){
return sqrt(abs(a - b));
}
void check(){
for (int i = 1; i <= n;i++){
for (int j = i + 1; j <= n;j++){
if(cal(a[j],i-1)+cal(a[i],j-1)<cal(a[i],i-1)+cal(a[j],j-1))
swap(a[i], a[j]);
}
}
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int t;
cin >> t;
while(t--){
cin >> n;
int te;
for (int i = 1; i <= n;i++){
cin >> a[i];
}
sort(a, a + 1 + n);
check();
check();
check();
for (int i = 1; i <= n;i++){
cout << a[i] << " ";
}
cout << endl;
}
}