結果

提出番号 1897
提出者 heno239
言語 C++
提出日時 2018-08-04 14:27:02
問題名 (72)K-th DigitSum
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 18ms 36176KB
2 AC 100% 19ms 36192KB
3 AC 100% 17ms 36176KB
4 AC 100% 16ms 36160KB
5 AC 100% 18ms 36176KB
6 AC 100% 16ms 36192KB
7 AC 100% 18ms 36192KB
8 AC 100% 19ms 36176KB
9 AC 100% 17ms 36160KB
10 AC 100% 18ms 36176KB
11 AC 100% 15ms 36176KB
12 AC 100% 17ms 36160KB
13 AC 100% 16ms 36176KB
14 AC 100% 17ms 36176KB
15 AC 100% 17ms 36176KB
16 AC 100% 17ms 36176KB
17 AC 100% 23ms 36176KB
18 AC 100% 18ms 36176KB
19 AC 100% 18ms 36176KB
20 AC 100% 16ms 36176KB
21 AC 100% 19ms 36176KB
22 AC 100% 16ms 36160KB
23 AC 100% 17ms 36176KB
24 AC 100% 18ms 36176KB
25 AC 100% 16ms 36176KB
26 AC 100% 18ms 36160KB
27 AC 100% 19ms 36160KB
28 AC 100% 15ms 36176KB
29 AC 100% 17ms 36160KB
30 AC 100% 18ms 36160KB
31 AC 100% 18ms 36176KB
32 AC 100% 17ms 36176KB
33 AC 100% 17ms 36176KB
34 AC 100% 16ms 36176KB
35 AC 100% 18ms 36176KB
36 AC 100% 18ms 36176KB
37 AC 100% 22ms 36192KB
38 AC 100% 16ms 36192KB
39 AC 100% 18ms 36176KB
40 AC 100% 19ms 36176KB
41 AC 100% 17ms 36160KB
42 AC 100% 17ms 36176KB
43 AC 100% 16ms 36160KB
44 AC 100% 15ms 36176KB
45 AC 100% 17ms 36192KB
46 AC 100% 16ms 36176KB
47 AC 100% 17ms 36160KB
48 AC 100% 17ms 36160KB
49 AC 100% 18ms 36176KB
50 AC 100% 18ms 36144KB
51 AC 100% 16ms 36160KB

ソースコード

#include<iostream>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<queue>
#include<ciso646>
#include<random>
#include<map>
#include<set>
#include<complex>
#include<bitset>
using namespace std;
typedef long long ll;
typedef unsigned int ui;
const ll MOD = (1e+9)+7;
const ll INF = (ll)1000000007 * 1000000007;
typedef pair<int, int> P;
#define stop char nyaa;cin>>nyaa;
#define rep(i,n) for(int i=0;i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define Rep(i,sta,n) for(int i=sta;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define per1(i,n) for(int i=n;i>=1;i--)
#define Rep1(i,sta,n) for(int i=sta;i<=n;i++)
typedef long double ld;
typedef complex<ld> Point;
const ld eps = 1e-11;
const ld pi = acos(-1.0);
typedef pair<ll, ll> LP;
typedef pair<ld, ld> LDP;
typedef pair<P, int> PP;
//i桁でjが桁和になるものの個数
ll dp[1001][1001] = {};
void init() {
	dp[0][0] = 1;
	Rep(i, 1, 1001) {
		rep(j, 1001) {
			rep(k, 10) {
				if (j - k >= 0) {
					dp[i][j] += dp[i - 1][j - k];
				}
			}
		}
	}
}
string kth(int n,ll k){
	int chk = 0;
	rep(i, 1001) {
		if (dp[i][n] > k) {
			chk = i; break;
		}
	}
	chk--;
	ll d = k / dp[chk][n];
	ll r = k % dp[chk][n];
	char nex = '0' + d;
	return nex + kth(n - d, r);
}
int main(){
	init();
	int n; ll k; cin >> n >> k;
	int chk = 0;
	rep(i, 1001) {
		if (dp[i][n] >= k) {
			chk = i; break;
		}
	}
	string out;
	per1(i, chk) {
		int d;
		rep(j, 10) {
			if (n-j>=0&&k > dp[i-1][n - j]) {
				k -= dp[i - 1][n - j];
			}
			else {
				d = j; break;
			}
		}
		out += '0' + d;
		n -= d;
	}
	cout << out << endl;
	return 0;
}