| 提出番号 | 1936 |
|---|---|
| 提出者 | ats5515 |
| 言語 | C++ |
| 提出日時 | 2018-08-04 14:39:01 |
| 問題名 | (72)K-th DigitSum |
| 結果 | AC |
| 点数 | 100% |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 1 | AC | 100% | 33ms | 36448KB |
| 2 | AC | 100% | 32ms | 36448KB |
| 3 | AC | 100% | 32ms | 36448KB |
| 4 | AC | 100% | 32ms | 36448KB |
| 5 | AC | 100% | 32ms | 36448KB |
| 6 | AC | 100% | 36ms | 36448KB |
| 7 | AC | 100% | 36ms | 36432KB |
| 8 | AC | 100% | 36ms | 36448KB |
| 9 | AC | 100% | 33ms | 36448KB |
| 10 | AC | 100% | 36ms | 36448KB |
| 11 | AC | 100% | 35ms | 36448KB |
| 12 | AC | 100% | 33ms | 36448KB |
| 13 | AC | 100% | 32ms | 36448KB |
| 14 | AC | 100% | 31ms | 36448KB |
| 15 | AC | 100% | 33ms | 36448KB |
| 16 | AC | 100% | 36ms | 36432KB |
| 17 | AC | 100% | 30ms | 36448KB |
| 18 | AC | 100% | 32ms | 36432KB |
| 19 | AC | 100% | 35ms | 36432KB |
| 20 | AC | 100% | 36ms | 36448KB |
| 21 | AC | 100% | 33ms | 36448KB |
| 22 | AC | 100% | 32ms | 36448KB |
| 23 | AC | 100% | 32ms | 36432KB |
| 24 | AC | 100% | 36ms | 36448KB |
| 25 | AC | 100% | 35ms | 36432KB |
| 26 | AC | 100% | 36ms | 36432KB |
| 27 | AC | 100% | 36ms | 36448KB |
| 28 | AC | 100% | 32ms | 36448KB |
| 29 | AC | 100% | 33ms | 36448KB |
| 30 | AC | 100% | 36ms | 36448KB |
| 31 | AC | 100% | 31ms | 36448KB |
| 32 | AC | 100% | 36ms | 36432KB |
| 33 | AC | 100% | 33ms | 36432KB |
| 34 | AC | 100% | 30ms | 36448KB |
| 35 | AC | 100% | 33ms | 36448KB |
| 36 | AC | 100% | 36ms | 36432KB |
| 37 | AC | 100% | 34ms | 36432KB |
| 38 | AC | 100% | 35ms | 36448KB |
| 39 | AC | 100% | 32ms | 36448KB |
| 40 | AC | 100% | 31ms | 36448KB |
| 41 | AC | 100% | 32ms | 36432KB |
| 42 | AC | 100% | 33ms | 36448KB |
| 43 | AC | 100% | 35ms | 36432KB |
| 44 | AC | 100% | 36ms | 36448KB |
| 45 | AC | 100% | 33ms | 36448KB |
| 46 | AC | 100% | 38ms | 36448KB |
| 47 | AC | 100% | 36ms | 36432KB |
| 48 | AC | 100% | 36ms | 36432KB |
| 49 | AC | 100% | 32ms | 36432KB |
| 50 | AC | 100% | 30ms | 36448KB |
| 51 | AC | 100% | 34ms | 36448KB |
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <string>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <stdio.h>
using namespace std;
#define int long long
int MOD = 1000000007;
int dp[1001][1001];
int N, K;
int rec(int a, int b) {
if (dp[a][b] != -1)return dp[a][b];
if (a == 1000) {
if (b == N) {
dp[a][b] = 1;
}
else {
dp[a][b] = 0;
}
}
else {
dp[a][b] = 0;
for (int i = 0; i < 10; i++) {
dp[a][b] += rec(a + 1, b + i);
}
if (dp[a][b] > K)dp[a][b] = K + 1;
}
return dp[a][b];
}
string res;
void rec2(int a, int b, int K2) {
if (a == 1000) {
//res.push_back((N - b) + '0');
return;
}
for (int i = 0; i < 10; i++) {
if (K2 - dp[a + 1][b + i] > 0) {
K2 -= dp[a + 1][b + i];
}
else {
res.push_back(i + '0');
rec2(a + 1, b + i, K2);
break;
}
}
}
signed main() {
cin.tie(0);
ios::sync_with_stdio(false);
cin >> N >> K;
for (int i = 0; i <= 1000; i++) {
for (int j = 0; j <= 1000; j++) {
dp[i][j] = -1;
}
}
rec(0, 0);
/*cerr << dp[1000][0] << endl;
cerr << dp[999][0] << endl;
cerr << dp[998][0] << endl;*/
rec2(0, 0, K);
reverse(res.begin(), res.end());
while (res.back() == '0')res.pop_back();
reverse(res.begin(), res.end());
cout << res << endl;
}