突然觉得CF的题很锻炼代码能力和反应速度。。更加坚定了我在寒假要多打CF的决心。
AB都是大水题,直接跳过了。
C题,很简单的题目,不过感觉细节必须考虑清楚。WA了很多发才过,而且最终代码还很挫。。还特判了n是1和2的情况= =。。代码太挫了就不贴了。
D题,也是比较简单的贪心,不过感觉直接写for的话可能比较烦= =,借鉴了别人递归的写法,还是挺不错的。代码如下:
1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #include <iostream> 5 using namespace std; 6 typedef long long ll; 7 8 ll base; 9 char s[100]; 10 ll solve(int r) 11 { 12 if(r == 0) return 0; 13 int l = r; 14 ll val = 0; 15 ll t = 1; 16 for(int i=r;i>=1&&t<base;i--,t*=10) 17 { 18 if(val+t*(s[i]-'0') < base) 19 { 20 if(s[i] != '0') l = i; 21 val = val + t*(s[i]-'0'); 22 } 23 else break; 24 } 25 return solve(l-1) * base + val; 26 } 27 28 int main() 29 { 30 cin >> base; 31 scanf("%s",s+1); 32 cout << solve(strlen(s+1)) << endl; 33 return 0; 34 }
还是要提高代码能力啊!