結果
問題 | No.116 門松列(1) |
ユーザー |
![]() |
提出日時 | 2022-05-16 23:32:30 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 5,000 ms |
コード長 | 2,292 bytes |
コンパイル時間 | 1,249 ms |
コンパイル使用メモリ | 112,896 KB |
最終ジャッジ日時 | 2025-01-29 08:48:49 |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
ソースコード
#include <algorithm>#include <iostream>#include <iomanip>#include <limits.h>#include <map>#include <math.h>#include <numeric>#include <queue>#include <set>#include <sstream>#include <string>#include <utility>#include <vector>#include <stack>using namespace std;#define rep(i, n) for (int i = 0; i < n; i++)#define rep1(i, n) for (int i = 1; i < n + 1; i++)#define all(A) A.begin(), A.end()#define itr(A, l, r) A.begin() + l, A.begin() + r#define debug(var) cout << #var << " = " << var << endl;typedef long long ll;template <typename T>struct Compress{vector<T> xs;Compress() = default;Compress(const vector<T> &vs){add(vs);}Compress(const initializer_list<vector<T>> &vs){for (auto &p : vs)add(p);}void add(const vector<T> &vs){copy(begin(vs), end(vs), back_inserter(xs));}void add(const T &x){xs.emplace_back(x);}void build(){sort(begin(xs), end(xs));xs.erase(unique(begin(xs), end(xs)), end(xs));}vector<int> get(const vector<T> &vs) const{vector<int> ret;transform(begin(vs), end(vs), back_inserter(ret), [&](const T &x){ return lower_bound(begin(xs), end(xs), x) - begin(xs); });return ret;}int get(const T &x) const{return lower_bound(begin(xs), end(xs), x) - begin(xs);}const T &operator[](int k) const{return xs[k];}};int main(void){int n;cin >> n;vector<int> a(n);rep(i, n){cin >> a[i];}int ans = 0;rep(i, n - 2){vector<int> tmp;rep(j, 3){tmp.push_back(a[i + j]);}auto print_vector = [](auto v){for (auto i : v){cout << i << ',';}cout << endl;};// print_vector(tmp);Compress<int> comp(tmp);comp.build();vector<int> z = comp.get(tmp);// print_vector(z);if (*max_element(all(z)) < 2){continue;}if (z[0] == 1 || z[2] == 1){ans++;}}cout << ans << endl;}