#include #include #include #include //#include #include #include #include #include #include //#include #include #include #include //#include #include #include //#include #include #include #include #include const int dx[] = {1, 0, -1, 0}; const int dy[] = {0, 1, 0, -1}; using namespace std; typedef long long ll; typedef vector vi; typedef vector vll; typedef pair pii; bool my_next_permutation(const vector& p, vector& swaps) { swaps.clear(); int n = p.size(); int k = n-2; for (; p[k] >= p[k+1] && k >= 0; k--); if (k >= 0) { int l = n-1; for (; p[l] < p[k]; l--); swaps.emplace_back(k, l); } int low = k+1, high = n-1; while (low < high) { swaps.emplace_back(low++, high--); } return k >= 0; } int main() { cin.tie(0); ios::sync_with_stdio(false); int N, K; cin >> N >> K; vector p(N), B(N); for (int i = 0; i < N; i++) cin >> p[i]; for (int i = 0; i < N; i++) cin >> B[i]; vector swaps; ll ans = 0, now = 0; for (int i = 0; i < N; i++) { ans += abs(p[i]-B[i]); } now = ans; if (K == 0) { cout << 0 << endl; return 0; } K--; while (K--) { my_next_permutation(p, swaps); for (pii pp : swaps) { now -= abs(p[pp.first] - B[pp.first]); now -= abs(p[pp.second] - B[pp.second]); swap(p[pp.first], p[pp.second]); now += abs(p[pp.first] - B[pp.first]); now += abs(p[pp.second] - B[pp.second]); } ans += now; } cout << ans << endl; return 0; }