結果
問題 |
No.3157 Nabeatsu
|
ユーザー |
|
提出日時 | 2025-08-23 21:48:31 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 26 ms / 2,000 ms |
コード長 | 1,128 bytes |
コンパイル時間 | 3,225 ms |
コンパイル使用メモリ | 279,952 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-08-23 21:48:39 |
合計ジャッジ時間 | 7,080 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 45 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i,n) for (int i = 0; i< (n); ++i) #define repi(i, a, b) for (int i = (a); i < (b); ++i) #define all(x) (x).begin(), (x).end() #define fore(i, a) for(auto &i:a) using ll = long long; int main() { string n; cin >> n; int sz = n.size(); auto subtract = [&](string num){ rep(i, sz){ int j = sz-i-1; if(num[j] == '0'){ num[j] = '9'; } else{ num[j] = num[j]-1; break; } } return num; }; auto skip = [&](string num, int ind){ num[ind] = '2'; ind++; while(ind < sz){ num[ind] = '9'; ind++; } return num; }; auto is_nabe = [&](string num){ bool flag = false; int sum = 0; int ind; rep(i, sz){ if(num[i] == '3'){ flag = true, ind = i; break; } sum += num[i]; } if(!flag && (sum%3==0)) return -2; else if(flag) return ind; else return -1; }; while(true){ int t = is_nabe(n); if(t == -1)break; if(t >= 0){ n = skip(n, t); } if(t == -2){ n = subtract(n); } } cout << n << endl; }