Quiz
https://atcoder.jp/contests/agc039/tasks/agc039_a
AC Code
https://atcoder.jp/contests/agc039/submissions/7879593
ランレングス圧縮 (復元はできない)
// ランレングス // 例 s = "aabccc" => [2, 1, 3] VI run_length(string s){ char prev = s[0]; VI V; ll cnt = 1; FOR(i, 1, s.size()){ char c = s[i]; if(c!=prev){ V.push_back(cnt); // reset cnt = 1; prev = c; }else{ cnt++; } } V.push_back(cnt); return V; }
通らない人のためのテストケース
aba 3 answer : 2
vector version (長さのみ)
// vector version // [1 3 3 8 7 7 7] => [1 2 1 3] VI run_length(VI& A){ ll N = A.size(); VI ret; ll last = A[0]; ll cnt = 1; FOR(i, 1, N){ if(A[i]==last){ cnt++; }else{ ret.push_back(cnt); cnt = 1; } last = A[i]; } if(cnt) ret.push_back(cnt); return ret; }
vector version (値と長さのペアのvector)
vector<PII> run_length(VI& A){ ll N = A.size(); vector<PII> ret; ll last = A[0]; ll cnt = 1; FOR(i, 1, N){ if(A[i]==last){ cnt++; }else{ ret.push_back({last,cnt}); cnt = 1; } last = A[i]; } if(cnt) ret.push_back({last,cnt}); return ret; }
文字情報付きバージョン
using P = pair<char, ll>; // どの文字が長さいくつ // のvectorで返す vector<P> run_length(string& s){ vector<P> ret; ll N = s.size(); if(N==0) return ret; char cur=s[0]; ll cnt=1; FOR(i, 1, N){ if(s[i]==cur){ cnt++; }else{ ret.push_back(MP(cur, cnt)); cur = s[i]; cnt = 1; } } ret.push_back(MP(cur, cnt)); return ret; }