実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 27
問題概要
人が横一列に並んでおり、左から
番目の人は色
の服を着ている。ここで、服の色は色
の
色であり、それぞれの色の服をちょうど2人が着ている。各
について、「色
の服を着た二人の人の間にはちょうど一人いる」という条件を満たすものは何通りあるか求めよ。
制約
- 入力はすべて整数。
考察
の制約が小さいので、素直に二重ループして一つずつ
について見ていけばよいだろう。
について具体的には、
となる
を
とし (制約よりこのような
は必ず2つ存在する) 、
ならば答えとなるカウンターを1増やす。
とい処理をしてあげればよい。
なお、コードでは 0-indexed としている。
コード
#include <bits/stdc++.h>usingnamespacestd; #define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)// ======================================== //intmain() { int N; cin>> N; vector<int> A(2 * N); rep(i, 0, 2 * N) cin>> A[i]; int ans = 0; rep(i, 1, N + 1) { int j0 = 0, j1 = 0; bool flag = false; rep(j, 0, 2 * N) { if (A[j] == i) { if (flag) { flag = false; j1 = j; break; } else { flag = true; j0 = j; } } } if (j1 - j0 == 2) { ans++; } } cout<< ans << endl; }
実装時間: 5分