結果
問題 |
No.3290 Encrypt Failed, but Decrypt Succeeded
|
ユーザー |
|
提出日時 | 2025-10-03 22:42:51 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,979 bytes |
コンパイル時間 | 3,479 ms |
コンパイル使用メモリ | 288,484 KB |
実行使用メモリ | 20,716 KB |
最終ジャッジ日時 | 2025-10-03 22:42:57 |
合計ジャッジ時間 | 5,338 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 24 WA * 3 |
ソースコード
#include <bits/stdc++.h> #include <atcoder/fenwicktree.hpp> #include <atcoder/segtree.hpp> #include <atcoder/modint.hpp> #include <atcoder/dsu.hpp> #include <atcoder/lazysegtree.hpp> using namespace atcoder; using namespace std; using ll = long long; using ull = unsigned long long; template <class T> using max_heap = priority_queue<T>; template <class T> using min_heap = priority_queue<T, vector<T>, greater<>>; ll ll_min = numeric_limits<ll>::min(); ll ll_max = numeric_limits<ll>::max(); ll ALPHABET_N = 26; using mint = modint998244353; #define rep(i, n) for (ll i = (ll)0; i < (ll)n; i++) #define rep_(i, k, n) for (ll i = (ll)k; i < (ll)n; i++) #define all(a) a.begin(), a.end() char strnum_to_char(string str) { return (char)((stoi(str) - 1) + 'a'); } int main() { ios::sync_with_stdio(false); cin.tie(0); ll n, k; cin >> n >> k; string t; cin >> t; if(n == 1) { cout << strnum_to_char(t) << endl; return 0; } if(n == 2) { string ans = ""; if(k == 1) ans += strnum_to_char(t.substr(0, 1)) + strnum_to_char(t.substr(1, 1)); else ans += strnum_to_char(t.substr(0, 2)); cout << ans << endl; return 0; } vector<vector<ll>> patterns(n, vector<ll>(2, 0)); for (ll i = n - 1; i >= 0; i--) { if (i == n - 1) { if (t[i] != '0') patterns[i][0] = 1; continue; } char c = t[i]; if (c != '0') { patterns[i][0] = patterns[i + 1][0] + patterns[i + 1][1]; } if (c == '1' || (c == '2' && t[i + 1] <= '6')) { if (i + 2 < n) patterns[i][1] = patterns[i + 2][0] + patterns[i + 2][1]; else patterns[i][1] = 1; } patterns[i][0] = min(patterns[i][0], ll_max / 10); patterns[i][1] = min(patterns[i][1], ll_max / 10); } string ans = ""; ll rest = k; rest--; for (ll i = 0; i < n;) { if (rest >= patterns[i][0]) { rest -= patterns[i][0]; ans += strnum_to_char(t.substr(i, 2)); i += 2; } else { ans += strnum_to_char(t.substr(i, 1)); i += 1; } } cout << ans << endl; return 0; }