結果
問題 |
No.3290 Encrypt Failed, but Decrypt Succeeded
|
ユーザー |
![]() |
提出日時 | 2025-10-03 22:16:57 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 32 ms / 2,000 ms |
コード長 | 973 bytes |
コンパイル時間 | 3,322 ms |
コンパイル使用メモリ | 290,936 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-10-03 22:17:02 |
合計ジャッジ時間 | 4,984 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
#include<bits/stdc++.h> using namespace std; int main(){ using ll=long long; ll inf=2e18; ll n,k; string t; cin>>n>>k>>t; auto f=[&](int l,int len){ if (!(0<=l&&l+len<=n)) return -1; int ret; if (len==1) ret=t[l]-'0'; if (len==2){ if (t[l]=='0') ret=-1; else ret=(t[l]-'0')*10+(t[l+1]-'0'); } if (1<=ret&&ret<=26) return ret; else return -1; }; vector<ll> dp(n+1); dp[0]=1; for (int i=1;i<=n;i++){ if (f(n-i,1)!=-1) dp[i]+=dp[i-1]; if (f(n-i,2)!=-1) dp[i]+=dp[i-2]; dp[i]=min(dp[i],inf); } string ans; for (int i=0;i<n;){ vector<tuple<int,ll,int>> vp; if (f(i,1)!=-1) vp.push_back({f(i,1),dp[n-i-1],i+1}); if (f(i,2)!=-1) vp.push_back({f(i,2),dp[n-i-2],i+2}); sort(vp.begin(),vp.end()); ll sum=0; for (auto [val,s,j]:vp){ if (k<=sum+s){ ans+=char('a'+val-1); i=j; k-=sum; break; } sum+=s; } } cout<<ans<<endl; }