Codeforces-758D Ability To Convert

Posted xFANx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces-758D Ability To Convert相关的知识,希望对你有一定的参考价值。

传送门

 

给定一个N,和一个字符串,已知字符串是由不大于N的十进制数拼接而成,从左到右分别代表N^k, N^(k-1)...., N^1, N^0的权数,求这个字符串代表的数的最小值

 

嗯 注意前导零

 

 1 #include <cmath>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <algorithm>
 6 #include <queue>
 7 #define INF 0x3f3f3f3f
 8 using namespace std;
 9 typedef long long LL;
10 LL N, M;
11 LL ans;
12 const int maxk = 66;
13 string s;
14 string ss;
15 
16 void add(int i, int j) {
17     LL tmp = 0;
18     for (int k = i; k <= j; k++) {
19         tmp = tmp * 10 + s[k] - 0;
20     }
21     ans = ans + tmp * M;
22 }
23 
24 int main() {
25     LL tmp = 0;
26     cin >> ss;
27     int l = ss.length();
28     for (int i = 0 ; i <= l - 1; i++) {
29         N = N * 10 + ss[i] - 0;
30     }
31     M = 1;
32     cin >> s;
33     int len = s.length();
34     for (int i = len - 1; i >= 0; i -= l) {
35         if (i >= l - 1) {
36             int k;
37             if (s.substr(i - l + 1, l) >= ss) {
38                 add(i - l + 2, i);
39                 k = i - l + 2;
40             } else {
41                 add(i - l + 1, i);
42                 k = i - l + 1;
43             }
44             while (k <= i && s[k] == 0) {
45                 k++;
46             }
47             if (k == i + 1) {
48                 i = i + l - 1;
49             } else {
50                 i = k + l - 1;
51             }
52         } else {
53             add(0, i);
54         }
55         M *= N;
56     }
57     printf("%lld\n", ans);
58     return 0;
59 }

 

以上是关于Codeforces-758D Ability To Convert的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 758D Ability To Convert dp

Codeforces 758D Ability To Convert(区间DP)

codeforces 758 D

codeforces 758C

「Codeforces」758D(贪心细节/dp)

Codeforces 758B:Blown Garland(模拟)