博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【动态规划】Codeforces Round #392 (Div. 2) D. Ability To Convert
阅读量:7065 次
发布时间:2019-06-28

本文共 2498 字,大约阅读时间需要 8 分钟。

D. Ability To Convert
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Alexander is learning how to convert numbers from the decimal system to any other, however, he doesn't know English letters, so he writes any number only as a decimal number, it means that instead of the letter A he will write the number 10. Thus, by converting the number 475 from decimal to hexadecimal system, he gets 11311 (475 = 1·162 + 13·161 + 11·160). Alexander lived calmly until he tried to convert the number back to the decimal number system.

Alexander remembers that he worked with little numbers so he asks to find the minimum decimal number so that by converting it to the system with the base n he will get the number k.

Input

The first line contains the integer n (2 ≤ n ≤ 109). The second line contains the integer k (0 ≤ k < 1060), it is guaranteed that the number k contains no more than 60 symbols. All digits in the second line are strictly less than n.

Alexander guarantees that the answer exists and does not exceed 1018.

The number k doesn't contain leading zeros.

Output

Print the number x (0 ≤ x ≤ 1018) — the answer to the problem.

Examples
input
13 12
output
12
input
16 11311
output
475
input
20 999
output
3789
input
17 2016
output
594
Note

In the first example 12 could be obtained by converting two numbers to the system with base 13: 12 = 12·130 or 15 = 1·131 + 2·130.

 

就f(i,j)表示将前i个数字划分为j位的最小值,状态转移方程看代码。

要判断是否会爆long long,我取对数判的。

#include
#include
#include
#include
using namespace std;#define INF 1000000000000000000ll#define EPS 0.00000001typedef long long ll;ll n;char a[70];ll f[70][70];int m;int main(){// freopen("d.in","r",stdin); scanf("%I64d%s",&n,a+1); m=strlen(a+1); for(int i=1;i<=m;++i) for(int j=1;j<=i;++j) f[i][j]=INF; for(int i=1;i<=m;++i) for(int j=1;j<=i;++j) { ll now=0,base=1; for(int k=1;i-k>=j-1;++k) { now+=((ll)(a[i-k+1]-'0')*base); if(base>=n || now>=n) break; base*=10ll; if(j==1 && k!=i) continue; if(!(a[i-k+1]=='0' && k!=1)) { if(log(f[i-k][j-1])+log(n)-log(INF-now)<=EPS) f[i][j]=min(f[i][j],f[i-k][j-1]*n+now); } } } printf("%I64d\n",*min_element(f[m]+1,f[m]+m+1)); return 0;}

转载于:https://www.cnblogs.com/autsky-jadek/p/6321755.html

你可能感兴趣的文章
Date12
查看>>
HTTP协议09-响应首部字段
查看>>
【原创】MySQL新旧版本ORDER BY 处理方法
查看>>
Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
查看>>
linux shell单引号、双引号及无引号区别(考试题答案系列)
查看>>
625某电商网站数据库宕机故障解决实录(下)
查看>>
创业公司感悟录之十个提醒—作者李天平
查看>>
.NET Project Open Day(2011.11.13)
查看>>
centos 记录用户行为轨迹
查看>>
各角色眼中的性能测试
查看>>
Citrix XenDesktop 引发的学案(四)-与“您的虚拟桌面”之间的连接失败,状态(1030)...
查看>>
mysql-5.6的GTID复制的实现
查看>>
6421B Lab10 网络文件和打印服务的配置与故障排除
查看>>
快速安装配置zabbix_agent端
查看>>
DNS服务的配置与管理(5) 配置转发器
查看>>
AIP(Azure 信息保护)之一:启用与激活服务
查看>>
一步步学WebSocket(3)WebSocket协议格式
查看>>
linux更新内核
查看>>
通过mdadm命令调用内核MD模块实现软Raid
查看>>
为RemoteApp的登录用户(域用户)添加输入法的方法
查看>>