結果
問題 | No.3015 右に寄せろ! |
ユーザー |
![]() |
提出日時 | 2025-01-25 14:39:33 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 54 ms / 2,000 ms |
コード長 | 1,948 bytes |
コンパイル時間 | 5,778 ms |
コンパイル使用メモリ | 333,868 KB |
実行使用メモリ | 15,124 KB |
最終ジャッジ日時 | 2025-01-25 23:24:56 |
合計ジャッジ時間 | 7,560 ms |
ジャッジサーバーID (参考情報) |
judge9 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 36 |
ソースコード
#include <bits/stdc++.h> using namespace std; #include <atcoder/all> // 可変引数repマクロ https://trap.jp/post/1224/ #define rep1(a) for (long long i = 0; i < (long long)a; i++) #define rep2(i, a) for (long long i = 0; i < (long long)a; i++) #define rep3(i, a, b) for (long long i = (long long)a; i <= (long long)b; i++) #define rep4(i, a, b, c) for (long long i = (long long)a; i <= (long long)b; i += (long long)c) #define overload4(a, b, c, d, e, ...) e #define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__) #define printYesNo(is_ok) puts(is_ok ? "Possible" : "Impossible") #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 REVERSE(v) reverse(ALL(v)) template <class T> using pq_asc = priority_queue<T, vector<T>, greater<T>>; template <class T> using pq_des = priority_queue<T>; template <typename T> void printlnVector(T v) { for (auto n : v) { cout << n << endl; } } template <typename T> void printVector(T v) { for (auto n : v) { cout << n << " "; } cout << endl; } int main() { string S; cin >> S; vector<pair<char, int>> dumped_S; dumped_S.push_back(pair<char, long long>(S[0], 0)); for (auto c : S) { if (dumped_S.back().first != c) { dumped_S.push_back(pair<char, long long>(c, 0)); } dumped_S.back().second++; } long long ans = 0; rep(i, dumped_S.size() - 1) { if (dumped_S[i].first == '1' && dumped_S[i].second >= 2 && dumped_S[i + 1].first == '0') { long long cnt = dumped_S[i].second / 2; ans += cnt * dumped_S[i + 1].second; swap(dumped_S[i], dumped_S[i + 1]); dumped_S[i + 1].second = cnt * 2; } else if (dumped_S[i].first == '1' && dumped_S[i + 1].first == '1') { dumped_S[i + 1].second += dumped_S[i].second; dumped_S[i].second = 0; } } cout << ans << endl; return 0; }