| 提出番号 | 2129 |
|---|---|
| 提出者 | phyllo |
| 言語 | C++ |
| 提出日時 | 2018-08-04 16:08:21 |
| 問題名 | (72)K-th DigitSum |
| 結果 | AC |
| 点数 | 100% |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 1 | AC | 100% | 11ms | 68064KB |
| 2 | AC | 100% | 11ms | 68048KB |
| 3 | AC | 100% | 10ms | 68016KB |
| 4 | AC | 100% | 9ms | 68000KB |
| 5 | AC | 100% | 11ms | 68064KB |
| 6 | AC | 100% | 12ms | 68080KB |
| 7 | AC | 100% | 12ms | 68064KB |
| 8 | AC | 100% | 12ms | 68016KB |
| 9 | AC | 100% | 13ms | 68080KB |
| 10 | AC | 100% | 12ms | 68080KB |
| 11 | AC | 100% | 9ms | 68016KB |
| 12 | AC | 100% | 11ms | 68000KB |
| 13 | AC | 100% | 10ms | 68016KB |
| 14 | AC | 100% | 11ms | 68048KB |
| 15 | AC | 100% | 12ms | 68080KB |
| 16 | AC | 100% | 9ms | 68048KB |
| 17 | AC | 100% | 10ms | 68080KB |
| 18 | AC | 100% | 10ms | 68080KB |
| 19 | AC | 100% | 10ms | 68016KB |
| 20 | AC | 100% | 12ms | 68064KB |
| 21 | AC | 100% | 10ms | 68048KB |
| 22 | AC | 100% | 10ms | 68000KB |
| 23 | AC | 100% | 10ms | 68048KB |
| 24 | AC | 100% | 12ms | 68000KB |
| 25 | AC | 100% | 10ms | 68000KB |
| 26 | AC | 100% | 10ms | 68016KB |
| 27 | AC | 100% | 12ms | 68064KB |
| 28 | AC | 100% | 11ms | 68080KB |
| 29 | AC | 100% | 9ms | 68000KB |
| 30 | AC | 100% | 11ms | 68080KB |
| 31 | AC | 100% | 12ms | 68096KB |
| 32 | AC | 100% | 10ms | 68048KB |
| 33 | AC | 100% | 11ms | 68048KB |
| 34 | AC | 100% | 11ms | 68048KB |
| 35 | AC | 100% | 11ms | 68048KB |
| 36 | AC | 100% | 13ms | 68096KB |
| 37 | AC | 100% | 11ms | 68080KB |
| 38 | AC | 100% | 10ms | 68016KB |
| 39 | AC | 100% | 12ms | 68080KB |
| 40 | AC | 100% | 12ms | 68064KB |
| 41 | AC | 100% | 11ms | 68000KB |
| 42 | AC | 100% | 10ms | 68048KB |
| 43 | AC | 100% | 9ms | 68000KB |
| 44 | AC | 100% | 13ms | 68016KB |
| 45 | AC | 100% | 11ms | 68064KB |
| 46 | AC | 100% | 9ms | 68048KB |
| 47 | AC | 100% | 10ms | 68000KB |
| 48 | AC | 100% | 10ms | 68016KB |
| 49 | AC | 100% | 12ms | 68048KB |
| 50 | AC | 100% | 9ms | 68016KB |
| 51 | AC | 100% | 11ms | 68016KB |
#include <bits/stdc++.h>
using namespace std;
#define REP(i,a,n) for(int i=(a); i<(int)(n); i++)
#define rep(i,n) REP(i,0,n)
#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it)
#define ALLOF(c) (c).begin(), (c).end()
typedef long long ll;
typedef unsigned long long ull;
static const ll INF = (ll)1e16;
ll dp[2][1005][1005];
ll solve(int top, int m, int N){
if(dp[top][m][N] != -1) return dp[top][m][N];
if(m==1){
if(0 <= N && N <= 9) return dp[top][m][N] = 1;
return dp[top][m][N] = 0;
}
if(top == 1){
ll ret = 0;
REP(i,1,10){
int n = N-i;
if(n < 0) continue;
ret += solve(0, m-1, n);
if(ret > INF) ret = INF;
}
return dp[top][m][N] = ret;
}else{
ll ret = 0;
rep(i,10){
int n = N-i;
if(n < 0) continue;
ret += solve(0, m-1, n);
if(ret > INF) ret = INF;
}
return dp[top][m][N] = ret;
}
}
string ans;
void solve2(int top, int m, int N, int cnt, string num = ""){
//cout << top << " " << m << " " << N << " " << cnt << " " << num << endl;
if(ans != "") return;
if(m==1){
if(cnt == 1){
if(0 <= N && N <= 9){
ans = num + (char)('0' + N);
return;
}
}else{
return;
}
}
if(top == 1){
ll ret = 0;
REP(i,1,10){
int n = N-i;
if(n < 0) continue;
if(ret + solve(0,m-1,n) < cnt){
ret += solve(0,m-1,n);
}else{
solve2(0, m-1, n, cnt-ret, num + (char)('0' + i));
return;
}
}
}else{
ll ret = 0;
rep(i,10){
int n = N-i;
if(n < 0) continue;
if(ret + solve(0,m-1,n) < cnt){
ret += solve(0,m-1,n);
}else{
solve2(0, m-1, n, cnt-ret, num + (char)('0' + i));
return;
}
}
}
}
int main(){
int N, K;
cin >> N >> K;
rep(i,2) rep(j,1005) rep(k,1005) dp[i][j][k] = -1;
int m = 0;
ll cnt = 0;
ll base = 0;
REP(i,1,1000){
ll ret = solve(1, i, N);
if(K <= base + ret){
m = i;
cnt = K - base;
break;
}
base += ret;
}
ans = "";
solve2(1, m, N, cnt);
cout << ans << endl;
return 0;
}