結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 3ms 8336KB
2 AC 100% 2ms 8640KB
3 AC 100% 2ms 8384KB
4 AC 100% 2ms 8384KB
5 AC 100% 3ms 8064KB
6 AC 100% 3ms 8272KB
7 AC 100% 3ms 8192KB
8 AC 100% 2ms 7776KB
9 AC 100% 3ms 8704KB
10 AC 100% 3ms 8672KB
11 AC 100% 2ms 8608KB
12 AC 100% 2ms 8064KB
13 AC 100% 2ms 7824KB
14 AC 100% 2ms 8064KB
15 AC 100% 3ms 8720KB
16 AC 100% 2ms 8720KB
17 AC 100% 3ms 8432KB
18 AC 100% 3ms 8016KB
19 AC 100% 2ms 8672KB
20 AC 100% 3ms 8160KB
21 AC 100% 3ms 8416KB
22 AC 100% 2ms 7632KB
23 AC 100% 2ms 8432KB
24 AC 100% 2ms 8432KB
25 AC 100% 2ms 7632KB
26 AC 100% 2ms 8688KB
27 AC 100% 2ms 8720KB
28 AC 100% 3ms 8704KB
29 AC 100% 2ms 8064KB
30 AC 100% 3ms 7616KB
31 AC 100% 4ms 8064KB
32 AC 100% 2ms 7248KB
33 AC 100% 2ms 8400KB
34 AC 100% 2ms 7248KB
35 AC 100% 2ms 8704KB
36 AC 100% 3ms 7472KB
37 AC 100% 3ms 8448KB
38 AC 100% 2ms 8416KB
39 AC 100% 3ms 8672KB
40 AC 100% 3ms 7536KB
41 AC 100% 2ms 7232KB
42 AC 100% 2ms 7792KB
43 AC 100% 2ms 8064KB
44 AC 100% 2ms 7520KB
45 AC 100% 3ms 7504KB
46 AC 100% 2ms 8080KB
47 AC 100% 1ms 8736KB
48 AC 100% 2ms 8160KB
49 AC 100% 3ms 7824KB
50 AC 100% 2ms 8416KB
51 AC 100% 2ms 7248KB

ソースコード

#define _USE_MATH_DEFINES
#include <cstdio>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <complex>
#include <string>
#include <vector>
#include <array>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <limits>
#include <climits>
#include <cfloat>
#include <functional>
#include <iterator>
#include <memory>
using namespace std;

int main()
{
    int n, k;
    cin >> n >> k;

    vector<vector<long long> > dp(1, vector<long long>(n+1, 0));
    dp[0][0] = 1;
    for(int i=0; ; ++i){
        dp.push_back(vector<long long>(n+1, 0));
        for(int j=0; j<=n; ++j){
            for(int a=0; a<=9 && j+a<=n; ++a){
                dp[i+1][j+a] += dp[i][j];
            }
        }

        if(dp[i+1][n] >= k)
            break;
    }


    string s;
    for(int i=dp.size()-1; i>0; --i){
        int a = 0;
        while(dp[i-1][n-a] < k){
            k -= dp[i-1][n-a];
            ++ a;
        }
        n -= a;
        s += (char)('0' + a);
    }
    cout << s << endl;

    return 0;
}