結果
問題 | No.3015 右に寄せろ! |
ユーザー |
|
提出日時 | 2025-01-25 13:07:47 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 32 ms / 2,000 ms |
コード長 | 1,223 bytes |
コンパイル時間 | 2,011 ms |
コンパイル使用メモリ | 195,560 KB |
実行使用メモリ | 22,024 KB |
最終ジャッジ日時 | 2025-01-25 22:34:10 |
合計ジャッジ時間 | 3,356 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 36 |
ソースコード
#include <bits/stdc++.h> using namespace std; template<typename T> vector<pair<T,long long>> RLE(vector<T> &A){ if(A.size() == 0) return {}; vector<pair<T,long long>> ret; T back = A.at(0); long long streak = 1; for(int i=1; i<A.size(); i++){ if(back == A.at(i)) streak++; else{ ret.push_back({back,streak}); back = A.at(i); streak = 1; } } ret.push_back({back,streak}); return ret; } vector<pair<char,long long>> RLE(string &s){ if(s.size() == 0) return {}; vector<pair<char,long long>> ret; char back = s.at(0); long long streak = 1; for(int i=1; i<s.size(); i++){ if(back == s.at(i)) streak++; else{ ret.push_back({back,streak}); back = s.at(i); streak = 1; } } ret.push_back({back,streak}); return ret; } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); string s; cin >> s; auto S = RLE(s); int bring = 0; long long answer = 0; for(auto &[c,len] : S){ if(c == '1') bring += len; else{ bring -= bring%2; answer += len*(bring/2); } } cout << answer << endl; }