| 提出番号 | 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;
}