結果
| 問題 |
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;
}
log_K