C 構造
題意:a的數據范圍大,b的數據范圍小,要求所有的a不同,考慮讓丟失的那個a最大即可。問題變成:構造一個最大的a[i]
思路:令a2是最大的,將a1,a3,a5....a2*n+1,置為最大的b,將a4,a6...a2*n置為最小的b ?
const int N = 4e5 + 10;LL n,m,k;
// vector<LL> a;
LL a[N],b[N];void solve()
{cin >> n;for (int i = 1;i <= 2 * n;i ++) cin >> b[i];sort(b + 1,b + 1 + 2 * n);LL t = 0;LL r = n;for (int i = 1;i <= 2 *n + 1;i += 2){a[i] = b[r ++];t += a[i];}LL l = 1;for (int i = 4;i <= 2 * n + 1;i += 2){a[i] = b[l ++];t -= a[i]; }a[2] = t;for (int i = 1;i <= 2 * n + 1;i ++) cout << a[i] << " ";cout << endl;}