牛客多校(2020第九场)A Groundhog and 2-Power Representation

 

 

 输入

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

输出

1315

题解:
直接附上代码,注释非常清晰
 1 #include<iostream>
 2 #include<cstring>
 3 #include<string>
 4 #include<algorithm>
 5 
 6 using namespace std;
 7 
 8 #define ll long long
 9 
10 int ans[200], alen = 0; //结果和结果的长度
11 int b[1005]; //temp数组
12 int p; //更新i的工具
13 char s[20005];
14 int k; //存储字符串数组及其长度
15 
16 void add(int b[], int len) {//高精度加 
17     alen = max(alen, len); //b的长度和ans长度取最大值
18     for (int i = 1; i <= alen; i++) {
19         ans[i] += b[i];
20         ans[i+1] += ans[i] / 10;
21         ans[i] %= 10;
22     }
23     if (ans[alen+1])   alen++; //如果最高位有进位,则长度++
24 }
25 
26 void mi(ll n) { //2的高精度幂
27     memset(b, 0, sizeof(b));
28     b[1] = 1;
29     int len = 1;
30     for (int i = 1; i <= n; i++) {
31         int temp = 0; //进位
32 
33         //相当于一次ans * 2, n次幂,所以i循环n次
34         for (int j = 1; j <= len; j++) {
35             b[j] = b[j] * 2 + temp;
36             temp = b[j] / 10;
37             b[j] %= 10;
38             if (temp != 0 && j == len)  len++; //如果最高位有所进位,那么长度加1,多进行一次循环 
39         }
40     }
41 
42     add(b, len); //计算的结果需要加到ans结果中
43 }
44 
45 ll ksm (ll a, ll b) { //普通快速幂
46     ll ans = 1;
47     for (; b; b >>= 1) {
48         if (b & 1)  ans *= a; //b为奇数,先进行一次乘
49         a *= a;
50     }
51     return ans;
52 }
53 
54 ll dfs(ll start, ll num_kuo) {
55     ll sum = 0;
56     p = 0;
57     // p = start;
58     for (int i = start; i < k; i++) {
59         p = max(p, i); //每次更新一下p
60         if (s[i] == '(')    num_kuo++;
61         if (s[i] == ')')    num_kuo--;
62         if (!num_kuo) { //如果括号结束
63             mi(sum); //那么对sum进行一次高度幂
64             return 0;
65         }
66         if (s[i] == ')')    return ksm(2, sum); //如果是括号里的括号,那么使用普通快速幂就可
67         if (s[i] == '2') {
68             if (s[i+1] == '(') {
69                 sum += dfs(i+1, num_kuo); 
70                 i = p;
71             }
72             else 
73                 sum += 2;
74         }
75     }
76 }
77 
78 int main() {
79     scanf("%s", s);
80     k = strlen(s);
81     for (int i = 0; i < k; i++) {
82         if (s[i] == '2') {
83             if (s[i+1] != '(') { //如果i+1不是括号,代表仅有2,那便直接加2
84                 memset(b, 0, sizeof(b));
85                 b[1] = 2;
86                 add(b, 1);
87             } 
88             else {
89                 dfs(i+1, 0);
90                 i = p; //递归完需要借助p来更新i
91             }
92         }
93     }
94 
95     for (int i = alen; i >= 1; i--) {
96         printf("%d", ans[i]);
97     }
98     return 0;
99 }
 
    

 

 
springboot034基于Springboot+Vue在线商城系统设计与开发毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值