結果
問題 | No.921 ずんだアロー |
ユーザー | log_K |
提出日時 | 2019-11-08 23:05:28 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 32 ms / 2,000 ms |
コード長 | 5,469 bytes |
コンパイル時間 | 1,813 ms |
コンパイル使用メモリ | 178,220 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-15 02:12:06 |
合計ジャッジ時間 | 3,174 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 22 |
ソースコード
#include <bits/stdc++.h> #define rep(var,cnt) for(int (var)=0; (var)<(int)(cnt); ++(var)) #define Rep(var,init,cnt) for(int (var)=(init); (var)<(cnt); ++(var)) #define REP(var,init,cnt) for(int (var)=(init); (var)<=(cnt); ++(var)) #define ran(var,vec) for(auto &(var):(vec)) #define all(v) (v).begin(),(v).end() #define rall(v) (v).rbegin(),(v).rend() #define SORT(v) sort(all(v)) #define RSORT(v) sort(rall(v)) #define SUM(v) accumulate(all(v),0) #define tget(tp,idx) get<idx>(tp) #define TF(flag) (flag)?1:0 using namespace std; using ll = long long; using ull = unsigned long long; using pi = pair<int,int>; using pl = pair<ll,ll>; using ti = tuple<int,int,int>; using tl = tuple<ll,ll,ll>; template<typename T> using vec = vector<T>; template<typename T> using mat = vector<vec<T>>; template<typename T> using cub = vector<mat<T>>; template<typename T> using val = valarray<T>; template<typename T> using pq = priority_queue<T>; template<typename T> using rpq = priority_queue<T,vec<T>,greater<T>>; template<typename T1,typename T2> ostream &operator<<(ostream &os, const pair<T1,T2> &p){ os<<"P("<<p.first<<", "<<p.second<<") "; return os; } template<typename T1,typename T2> istream &operator>>(istream &is, pair<T1,T2> &p){ is>>p.first>>p.second; return is; } template<typename T> ostream &operator<<(ostream &os, const vector<T> &v){ cout<<"V{"; for(int i=0; i<(int)v.size(); ++i){ os<<v[i]<<(i+1!=v.size()?" ":""); } cout<<"}"; return os; } template<typename T> istream &operator>>(istream &is, vector<T> &v){ for(T &in:v) is>>in; return is; } template<typename T> ostream &operator<<(ostream &os, const valarray<T> &v){ cout<<"V{"; for(int i=0; i<(int)v.size(); ++i){ os<<v[i]<<(i+1!=v.size()?" ":""); } cout<<"}"; return os; } template<typename T> istream &operator>>(istream &is, valarray<T> &v){ for(T &in:v) is>>in; return is; } // Usual Template End ================================================ template< typename T > struct edge { int src, to; T cost; edge(int to, T cost) : src(-1), to(to), cost(cost) {} edge(int src, int to, T cost) : src(src), to(to), cost(cost) {} edge &operator=(const int &x) { to = x; return *this; } operator int() const { return to; } }; template< typename T > using Edges = vector< edge< T > >; template< typename T > using WeightedGraph = vector< Edges< T > >; using UnWeightedGraph = vector< vector< int > >; template< typename T > using Matrix = vector< vector< T > >; template< typename G > struct CentroidDecomposition { const G &g; vector< int > sub; vector< vector< int > > belong; vector< bool > v; CentroidDecomposition()=default; CentroidDecomposition(const G &g) : g(g), sub(g.size()), v(g.size()), belong(g.size()) {} inline int build_dfs(int idx, int par) { sub[idx] = 1; for(auto &to : g[idx]) { if(to == par || v[to]) continue; sub[idx] += build_dfs(to, idx); } return sub[idx]; } inline int search_centroid(int idx, int par, const int mid) { for(auto &to : g[idx]) { if(to == par || v[to]) continue; if(sub[to] > mid) return search_centroid(to, idx, mid); } return idx; } inline void belong_dfs(int idx, int par, int centroid) { belong[idx].emplace_back(centroid); for(auto &to : g[idx]) { if(to == par || v[to]) continue; belong_dfs(to, idx, centroid); } } inline int build(UnWeightedGraph &t, int idx) { int centroid = search_centroid(idx, -1, build_dfs(idx, -1) / 2); v[centroid] = true; belong_dfs(centroid, -1, centroid); for(auto &to : g[centroid]) { if(!v[to]) t[centroid].emplace_back(build(t, to)); } v[centroid] = false; return centroid; } inline int build(UnWeightedGraph &t) { t.resize(g.size()); return build(t, 0); } }; struct UnionFind { vector< int > data; UnionFind(int sz) { data.assign(sz, -1); } bool unite(int x, int y) { x = find(x), y = find(y); if(x == y) return (false); if(data[x] > data[y]) swap(x, y); data[x] += data[y]; data[y] = x; return (true); } int find(int k) { if(data[k] < 0) return (k); return (data[k] = find(data[k])); } int size(int k) { return (-data[find(k)]); } }; vector< int > dijkstra(UnWeightedGraph &g, int s) { const auto INF = numeric_limits< int >::max(); vector< int > dist(g.size(), INF); using Pi = pair< int, int >; priority_queue< Pi, vector< Pi >, greater< Pi > > que; dist[s] = 0; que.emplace(dist[s], s); while(!que.empty()) { int cost; int idx; tie(cost, idx) = que.top(); que.pop(); if(dist[idx] < cost) continue; for(auto &e : g[idx]) { auto next_cost = cost + 1; if(dist[e] <= next_cost) continue; dist[e] = next_cost; que.emplace(dist[e], e); } } return dist; } // Template End ====================================================== constexpr int MOD=1e9+7; constexpr int INF=INT_MAX; int main(void){ int N; cin>>N; vec<int> a(N); cin>>a; if(N==1){cout<<1<<endl; return 0;} int ta=1,tb=1; vec<bool> za(N,false),zb(N,false); za[0]=true,zb[1]=true; for(int i=1; i<N; ++i){ if(za[i-1]){ if(a[i]==a[i-1]) ++ta,za[i]=true; } else{ ++ta,za[i]=true; } } for(int i=2; i<N; ++i){ if(zb[i-1]){ if(a[i]==a[i-1]) ++tb,zb[i]=true; } else{ ++tb,zb[i]=true; } } cout<<max(ta,tb)<<endl; }