結果
| 問題 |
No.482 あなたの名は
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-02-11 16:59:49 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 74 ms / 2,000 ms |
| コード長 | 2,345 bytes |
| コンパイル時間 | 2,008 ms |
| コンパイル使用メモリ | 175,840 KB |
| 実行使用メモリ | 6,656 KB |
| 最終ジャッジ日時 | 2024-12-29 20:36:43 |
| 合計ジャッジ時間 | 4,194 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include "bits/stdc++.h"
using namespace std;
#define rep(i,n) for (int i=0;i<(n);++i)
#define rep2(i,a,b) for (int i=(a);i<(b);++i)
#define rrep(i,n) for (int i=(n)-1;i>=0;--i)
#define rrep2(i,a,b) for (int i=(a)-1;i>=b;--i)
#define chmax(a, b) (a = (a) < (b) ? (b) : (a))
#define chmin(a, b) (a = (a) > (b) ? (b) : (a))
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
#define all(a) begin(a),end(a)
#define ifnot(a) if(not (a))
#define dump(x) cerr << #x << " = " << (x) << endl
// #define int ll
#ifdef _MSC_VER
const bool test = true;
#else
const bool test = false;
#endif
int dx[] = { 1,0,-1,0 };
int dy[] = { 0,1,0,-1 };
const int INF = 1 << 28;
const ll INFL = (ll)1 << 58;
ll mod = (int)1e9 + 7;
const double eps = 1e-10;
typedef long double Real;
// return -1, 0, 1
int sgn(const Real& r) { return (r > eps) - (r < -eps); }
int sgn(const Real& a, const Real &b) { return sgn(a - b); }
//.....................
const int MAX = (int)2e5 + 5;
int H, W;
bool ng(int y, int x) {
return y < 0 || H <= y || x < 0 || W <= x;
}
std::vector<std::string> split(const std::string &str, char sep)
{
std::vector<std::string> v;
std::stringstream ss(str);
std::string buffer;
while (std::getline(ss, buffer, sep)) {
v.push_back(buffer);
}
return v;
}
ll N, K;
vector<ll> d;
vector<ll> d_rev;
void solve() {
cin >> N >> K;
d.resize(N+1);
d_rev.resize(N + 1);
d[0] = 0;
d_rev[0] = 0;
rep2(i, 1, N + 1) {
cin >> d[i];
d_rev[d[i]] = i;
}
if (test) {
rep(i, N + 1) {
cout << d_rev[i] << " ";
}
cout << endl;
}
ll cnt = 0;
rep(i, N + 1) {
if (d[i] != i) {
int id = d_rev[i];
if (test) {
dump(i);
dump(d[i]);
dump(id);
cerr << endl;
}
d_rev[d[i]] = id;
d[id] = d[i];
d[i] = i;
d_rev[i] = i;
cnt++;
}
}
if (test) {
rep(i, N + 1) cout << d[i] << " ";
cout << endl;
rep(i, N + 1) cout << d_rev[i] << " ";
cout << endl;
}
dump(cnt);
if (cnt > K || (K - cnt) % 2 == 1) {
cout << "NO" << endl;
}
else cout << "YES" << endl;
}
signed main() {
int T = 10;
cout << fixed << setprecision(15);
rep(i, T) {
char s[MAX];
if (scanf("%s", s) == EOF) break;
int n = strlen(s);
for (int i = n - 1; i > -1; i--) {
ungetc(s[i], stdin);
}
solve();
}
return 0;
}