結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 24ms 44960KB
2 AC 100% 24ms 44976KB
3 AC 100% 22ms 44960KB
4 AC 100% 13ms 41888KB
5 AC 100% 30ms 44976KB
6 AC 100% 30ms 44960KB
7 AC 100% 25ms 44960KB
8 AC 100% 15ms 44464KB
9 AC 100% 31ms 44976KB
10 AC 100% 27ms 44960KB
11 AC 100% 10ms 38304KB
12 AC 100% 16ms 44576KB
13 AC 100% 16ms 44960KB
14 AC 100% 25ms 44960KB
15 AC 100% 25ms 44960KB
16 AC 100% 23ms 44976KB
17 AC 100% 26ms 44960KB
18 AC 100% 29ms 44960KB
19 AC 100% 19ms 44960KB
20 AC 100% 28ms 44960KB
21 AC 100% 24ms 44960KB
22 AC 100% 13ms 42912KB
23 AC 100% 20ms 44960KB
24 AC 100% 11ms 41648KB
25 AC 100% 11ms 40096KB
26 AC 100% 11ms 39328KB
27 AC 100% 25ms 44960KB
28 AC 100% 31ms 44976KB
29 AC 100% 20ms 44960KB
30 AC 100% 32ms 44960KB
31 AC 100% 29ms 44976KB
32 AC 100% 34ms 44960KB
33 AC 100% 24ms 44960KB
34 AC 100% 19ms 44960KB
35 AC 100% 24ms 44960KB
36 AC 100% 33ms 44976KB
37 AC 100% 32ms 44976KB
38 AC 100% 16ms 44960KB
39 AC 100% 31ms 44960KB
40 AC 100% 30ms 44976KB
41 AC 100% 12ms 40368KB
42 AC 100% 22ms 44960KB
43 AC 100% 13ms 43680KB
44 AC 100% 26ms 44960KB
45 AC 100% 25ms 44960KB
46 AC 100% 23ms 44976KB
47 AC 100% 11ms 39968KB
48 AC 100% 10ms 41248KB
49 AC 100% 30ms 44976KB
50 AC 100% 15ms 44448KB
51 AC 100% 12ms 42144KB

ソースコード

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

typedef int _loop_int;
#define REP(i,n) for(_loop_int i=0;i<(_loop_int)(n);++i)
#define FOR(i,a,b) for(_loop_int i=(_loop_int)(a);i<(_loop_int)(b);++i)
#define FORR(i,a,b) for(_loop_int i=(_loop_int)(b)-1;i>=(_loop_int)(a);--i)

#define DEBUG(x) cout<<#x<<": "<<x<<endl
#define DEBUG_VEC(v) cout<<#v<<":";REP(i,v.size())cout<<" "<<v[i];cout<<endl
#define ALL(a) (a).begin(),(a).end()

#define CHMIN(a,b) a=min((a),(b))
#define CHMAX(a,b) a=max((a),(b))

int n;
int k;

const int UB = (1<<30)-1;

int cnt[1252][1252];  // cnt[i][j] := i-keta, sum=j, leading-zero ok
int cnt2[1252][1252]; // cnt2[i][j]:= i-keta, sum=j, leading-zero ng

int main(){
  scanf("%d%d",&n,&k);
  cnt[0][0] = 1;
  FOR(len,1,1025)REP(sum,n+1){
    REP(d,10){
      cnt[len][sum+d] += cnt[len-1][sum];
      CHMIN(cnt[len][sum+d], UB);
    }
    FOR(d,1,10){
      cnt2[len][sum+d] += cnt[len-1][sum];
      CHMIN(cnt2[len][sum+d], UB);
    }
  }
  int len = 0;
  while(cnt[len][n]<k)len++;
  while(len > 0){
    int tmp = 0;
    int ans = 0;
    REP(d,10){
      int t2 = tmp + cnt[len-1][n-d];
      if(t2 >= k){
        ans = d;
        break;
      }
      tmp = t2;
    }
    putchar(ans+'0');
    n -= ans;
    k -= tmp;
    len--;
  }
  puts("");
  return 0;
}