提交时间:2024-11-14 14:28:13

运行 ID: 34742

#include <algorithm> #include <cstdio> #include <numeric> #include <utility> #include <vector> using namespace std; using i64 = long long; constexpr int MOD = 998244353; inline int add(int a, int b) { return (a + b) % MOD; } inline int sq(int a) { return (i64)a * a % MOD; } int main() { int n, t; scanf("%d %d", &n, &t); vector<int> a(n), b(n); for (auto& x : a) scanf("%d", &x); for (auto& x : b) scanf("%d", &x); vector<int> idx_a(n), idx_b(n); iota(idx_a.begin(), idx_a.end(), 0); sort(idx_a.begin(), idx_a.end(), [&a](int i, int j) { return a[i] < a[j]; }); iota(idx_b.begin(), idx_b.end(), 0); sort(idx_b.begin(), idx_b.end(), [&b](int i, int j) { return b[i] < b[j]; }); int dist = 0; vector<int> pos(n), target(n); for (int i = 0; i < n; ++i) { dist = add(dist, sq(a[idx_a[i]] - b[idx_b[i]])); pos[idx_a[i]] = i; target[idx_b[i]] = i; } if (t == 0) { printf("%d\n", dist); return 0; } int swp = 0; for (int i = 0; i < n; ++i) { if (pos[i] != target[i]) { int orig = idx_a[target[i]]; swap(idx_a[pos[i]], idx_a[target[i]]); swap(pos[i], pos[orig]); ++swp; } } printf("%d %d\n", dist, swp); return 0; }