CF758 D. Ability To Convert 细节处理字符串
link
題意:給定進(jìn)制數(shù)n及一串?dāng)?shù)字,問在此進(jìn)制下這串?dāng)?shù)能看成最小的數(shù)(10進(jìn)制)是多少(如HEX下 1|13|11 = 475)
思路:此題要仔細(xì)思考細(xì)節(jié)。首先要想使數(shù)最小那么必定有個(gè)想法是使低位的數(shù)盡可能大即位數(shù)盡可能多,個(gè)人想法是從最后一位開始向前遍歷,如果位數(shù)沒有超過n的位數(shù)且數(shù)值比n小,那么該數(shù)可以加入上一個(gè)分隔。如果不符合條件,則說明該數(shù)應(yīng)該作為新的分隔。
那么在此就有一個(gè)問題了,如果一個(gè)分隔是以0開始的(如:10000)顯然我們也將0認(rèn)定為是分隔的一部分,但如果有前導(dǎo)0了(11進(jìn)制 10110)顯然分隔是這樣的(10|1|10)此時(shí)這個(gè)0屬于最前面的那個(gè)分隔。
故當(dāng)某個(gè)數(shù)判斷不符合加入上一個(gè)分隔的條件,那么還要判斷下上一個(gè)遍歷的數(shù)字是否是0,否則要逐步回退到非0位,并將過程中這些0作為當(dāng)前分隔的一部分。
?
/** @Date : 2017-04-02-18.25* @Author : Lweleth (SoungEarlf@gmail.com)* @Link : https://github.com/* @Version :*/ #include<bits/stdc++.h> #define LL long long #define PII pair #define MP(x, y) make_pair((x),(y)) #define fi first #define se second #define PB(x) push_back((x)) #define MMG(x) memset((x), -1,sizeof(x)) #define MMF(x) memset((x),0,sizeof(x)) #define MMI(x) memset((x), INF, sizeof(x)) using namespace std;const int INF = 0x3f3f3f3f; const int N = 1e5+20; const double eps = 1e-8;char a[100]; LL ans = 0; int main() {LL n;while(~scanf("%lld%s", &n, a)){ans = 0;int x = strlen(a);int y = 0;int t = n;while(t)y++, t /= 10;LL cnt = 1;int bit = 0;int rec = x - 1;LL b = 1;for(int i = x - 1; i >= 0; i--){if(t + cnt * (a[i] - '0') < n && bit < y)t = t + cnt * (a[i] - '0'), cnt *= 10, bit++;else{int ct = 0;if(a[i + 1] == '0')//考慮到有前導(dǎo)0時(shí)回退加值{while(a[i + 1] == '0'){ct++;if(i + 1 == rec)break;i++;}}ans += t * b;b = b * n;t = a[i] - '0';bit = 1;cnt = 10;rec = i;}}if(t != 0)ans += t * b;printf("%lld\n", ans);}return 0; }轉(zhuǎn)載于:https://www.cnblogs.com/Yumesenya/p/6728372.html
總結(jié)
以上是生活随笔為你收集整理的CF758 D. Ability To Convert 细节处理字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT乙级 1003. 我要通过!
- 下一篇: 8-python自动化-day08-进程