#include #include #include #include #include #include #include #include //rand()を使うために必要 #include #include #include #include #include using namespace std; template bool next_combination(const T first, const T last, int k) { const T subset = first + k; // empty container | k = 0 | k == n if (first == last || first == subset || last == subset) { return false; } T src = subset; while (first != src) { src--; if (*src < *(last - 1)) { T dest = subset; while (*src >= *dest) { dest++; } iter_swap(src, dest); std::rotate(src + 1, dest + 1, last); std::rotate(subset, subset + (last - dest) - 1, last); return true; } } // restore std::rotate(first, subset, last); return false; } void solve() { int N, K; cin >> N >> K; vector S_vec(N); vector T_vec(N); for (int i = 0; i < N; i++) cin >> S_vec[i]; for (int i = 0; i < N; i++) cin >> T_vec[i]; vector> S_set(K, multiset{}); vector> T_set(K, multiset{}); for (int i = 0; i < N; i++) { S_set[i % K].insert(S_vec[i]); T_set[i % K].insert(T_vec[i]); } for (int k = 0; k < K; k++) { vector S_check(S_set[k].begin(), S_set[k].end()); vector T_check(T_set[k].begin(), T_set[k].end()); for (int i = 0; i < S_check.size(); i++) { if (S_check[i] != T_check[i]) { cout << "No" << endl; return; } } } cout << "Yes" << endl; } void check_sw() { // cout << "評価値算出=" << get_sum_time(eval_calculation_sw) / cnt_eval << endl; } int main() { solve(); // test(); // check_sw(); }