結果

提出番号 1701
提出者 dohatsutsu
言語 C++
提出日時 2018-08-04 13:33:09
問題名 (72)K-th DigitSum
結果 AC
点数 100%

テストケース

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

ソースコード

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAX = (1LL<<30);
ll N,K;

ll add(ll a,ll b){
  if( a+b > MAX )return MAX;
  else return a+b;
}

ll mem[1005][1005];
ll dfs(ll x,ll sum){
  if( x == 1001 )return ( sum == N );
  if( mem[x][sum] != -1 )return mem[x][sum];
  ll res=0;
  for(int i=0;i<=9;i++){
    if( sum + i > 1000 )break;
    res=add(res, dfs(x+1, sum+i) );
  }
  return mem[x][sum]=res;
}

int main(){
  memset( mem, -1, sizeof(mem) );
  

  cin>>N>>K;

  string ans="";
  ll x=0;
  ll sum=0;
  
  ll k=K-1;
  
  while(x<1001){
    for(int i=0;i<=9;i++){
      k-= dfs(x+1,  sum+i );
      if( k < 0 ){
        k+= dfs(x+1, sum+i );
        sum+=i;
        if( !ans.empty() || i!=0)ans.push_back('0'+i);
        break;
      }
    }
    x++;    
  }
  
  cout<< ans<<endl;
  return 0;
}