結果
| 問題 |
No.3109 Swap members
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-04-21 15:35:46 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 203 ms / 2,000 ms |
| コード長 | 3,018 bytes |
| コンパイル時間 | 2,053 ms |
| コンパイル使用メモリ | 171,780 KB |
| 実行使用メモリ | 27,128 KB |
| 最終ジャッジ日時 | 2025-04-21 15:35:57 |
| 合計ジャッジ時間 | 10,878 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 52 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef string::const_iterator State;
class ParseError {};
#define rep(i, n) for(ll i = 0; i < (n); i++)
#define reps(i, l, r) for(ll i = (l); i < (r); i++)
#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()
#define endl "\n";
const ll INF = LLONG_MAX / 4;
const ld inf = numeric_limits<long double>::max() / (ld)4;
const ll mod1 = 1000000007;
const ll mod2 = 998244353;
ll dx[4] = {1, 0, -1, 0};
ll dy[4] = {0, -1, 0, 1};
void chmin(ll& a, ll b){ if(a > b) a = b; }
void chmax(ll& a, ll b){ if(a < b) a = b; }
ll gcd(ll a, ll b) {return (b == 0 ? a : gcd(b, a % b));}
ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
const ld pi = 3.1415926535897;
bool islower(char c) { return 'a' <= c && c <= 'z'; }
bool isupper(char c) { return 'A' <= c && c <= 'Z'; }
bool isletter(char c) { return islower(c) || isupper(c); }
template <ll mod>
struct modint {
ll x;
modint() : x(0) {}
modint(ll y) : x(y >= 0 ? y % mod : (mod - (-y) % mod) % mod) {}
modint &operator+=(const modint &p) {
if ((x += p.x) >= mod) {
x -= mod;
}
return *this;
}
modint &operator-=(const modint &p) {
if ((x += mod - p.x) >= mod) {
x -= mod;
}
return *this;
}
modint &operator*=(const modint &p) {
x = (ll)(1ll * x * p.x % mod);
return *this;
}
modint &operator/=(const modint &p) {
*this *= p.inverse();
return *this;
}
modint operator-() const { return modint(-x); }
modint operator+(const modint &p) const { return modint(*this) += p; }
modint operator-(const modint &p) const { return modint(*this) -= p; }
modint operator*(const modint &p) const { return modint(*this) *= p; }
modint operator/(const modint &p) const { return modint(*this) /= p; }
bool operator==(const modint &p) const { return x == p.x; }
bool operator!=(const modint &p) const { return x != p.x; }
friend ostream &operator<<(ostream &os, const modint &p) { return os << p.x; }
friend istream &operator>>(istream &is, modint &a) {
ll t; is >> t;
a = modint<mod>(t);
return (is);
}
modint inverse() const {
ll a = x, b = mod, u = 1, v = 0, t;
while (b > 0) {
t = a / b;
swap(a -= t * b, b);
swap(u -= t * v, v);
}
return modint(u);
}
modint pow(ll n) const {
modint ret(1), mul(x);
while (n > 0) {
if (n & 1) ret *= mul;
mul *= mul;
n >>= 1;
}
return ret;
}
static ll get_mod() { return mod; }
};
void solve() {
ll N, K; cin >> N >> K;
vector<string>A(N), B(N);
rep(i, N) cin >> A[i];
rep(i, N) cin >> B[i];
vector<string>C, D;
rep(i, K) {
set<string>S, T;
ll pos = i;
while (pos < N) {
S.insert(A[pos]);
T.insert(B[pos]);
pos += K;
}
while (!S.empty()) {
C.emplace_back(*S.begin()); S.erase(S.begin());
D.emplace_back(*T.begin()); T.erase(T.begin());
}
}
if (C == D) {
cout << "Yes" << endl;
}
else cout << "No" << endl;
}
int main() {
ll T = 1;
//cin >> T;
while (T--) solve();
}