Groundhog and 2-Power Representation

原题请看这里

题目描述:

土拨鼠参加了数学课。 在这堂课上,他的数学老师说:
任何正整数都可以用2{2}2的幂表示。
例如:137=27+23+20137 = 2 ^ 7 + 2 ^ 3 + 2 ^ 0137=27+23+20。
幂用括号表示。即,a(b){a(b)}a(b)代表ab{a ^ b}ab。因此,137{137}137可以表示为137=2(7)+2(3)+2(0)137 = {2(7)+2(3)+2(0) }137=2(7)+2(3)+2(0)
此外,对于7=22+2+207 = 2 ^ 2 + 2 + 2 ^ 07=22+2+20(212 ^ 121用2{2}2表示),3=2+203 = 2 + 2 ^ 03=2+20
,137可以最终表示为137=2(2(2)+2+2(0))+2(2+2(0))+2(0){137 = 2(2(2)+ 2 + 2(0))+ 2(2 + 2(0))+ 2(0)}137=2(2(2)+2+2(0))+2(2+2(0))+2(0)
另一个示例:1315=210+28+25+2+1=2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)1315 = 2 ^ {10} + 2 ^ 8 + 2 ^ 5 + 2 + 1 = 2(2(2 + 2(0))+ 2)+2(2(2 + 2(0))) +2(2(2)+2(0))+ 2 + 2(0)1315=210+28+25+2+1=2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
土拨鼠感觉很棒,希望您编写一个模拟上述内容的程序。您需要读入2{2}2的幂的表达式并计算其值。

输入描述:

一行,表示一个2的幂的表达式。

输出描述:

输出表达式的值。

样例输入:

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

样例输出:

1315

思路:

高精度
首先我们判断一下如果有"2("出现,那么我们就开始递归,否则直接答案+2
设有一个数h
每次进来一个括号就判断一下一下是左括号还是右括号,如果是左括号就h++,右括号就h–,如果h==0,说明这个括号内已经算完了。
应为最大的一个括号内的数比较小,所以我们可以直接算指数。
具体细节请看代码。

ACACAC CodeCodeCode

(队友写的,有不对的地方请指出)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
char a[20010];
ll sum;
int ans[205],anslen;
void gaojin(int b[],int len){anslen=max(anslen,len);for(int i=1;i<=anslen;++i){ans[i]+=b[i];ans[i+1]+=ans[i]/10;ans[i]%=10;}while(ans[anslen+1]) ++anslen;
}//高精加法
int b[1005];
void ksm(ll c){memset(b,0,sizeof(b));b[1]=1;int k=1;for(int i=1;i<=c;++i){int x=0;for(int j=1;j<=k;++j){b[j]=b[j]*2+x;x=b[j]/10;b[j]%=10;if(x&&j==k) ++k;}}gaojin(b,k);
}//2的幂次高精
ll ksm1(ll b,ll c) {ll d=1;while(c>0) {if(c&1)d*=b;c>>=1;b*=b;}return d;
}//2的幂次
int p,k;
ll dg(ll x,ll h){ll q=0;p=0;for(int i=x;i<k;i++){p=max(p,i);if(a[i]=='(')h++;if(a[i]==')')h--;if(!h){ksm(q);return 0;}if(a[i]==')'){return ksm1(2,q);}if(a[i]=='2'){if(a[i+1]=='(') q+=dg(i+1,h),i=p;else q+=2;}}
}
int main(){scanf("%s",a);k=strlen(a);for(int i=0;i<k;i++)if(a[i]=='2'){if(a[i+1]!='('){memset(b,0,sizeof(b));b[1]=2;gaojin(b,1);}else dg(i+1,0),i=p;}for(int i=anslen;i>=1;i--)printf("%d",ans[i]);
}

2020暑期牛客多校训练营第九场(A)Groundhog and 2-Power Representation(高精度)相关推荐

  1. 2020暑期牛客多校训练营第八场(E)Enigmatic Partition(数学,二阶隔项差分)

    Enigmatic Partition 原题请看这里 题目描述: 数字nnn的分区是所有数字之和等于nnn的集合. 如果分区n=a1+a2+...+amn = a_1 + a_2 + ... + a_ ...

  2. 2019牛客多校训练营第一场 H题 HOR 题解

    题目描述: 输入描述: 输出描述: 示例1: 题解: 更多问题可关注牛客竞赛区,一个刷题.比赛.分享的社区. 传送门:https://ac.nowcoder.com/acm/contest/discu ...

  3. 2019牛客多校训练营第一场 E题 ABBA 题解

    问题描述: 输入描述: 输出描述: 示例1: 题解: 更多问题可关注牛客竞赛区,一个刷题.比赛.分享的社区. 传送门:https://ac.nowcoder.com/acm/contest/discu ...

  4. 2020年牛客多校第五场C题-easy(纯组合计数不要生成函数的做法)

    文章目录 description solution code description 有TTT组测试数据 对于两个长度为KKK的数列{a}\{a\}{a}和{b}\{b\}{b},满足∑i=1Kai= ...

  5. 2019暑假牛客多校赛第九场H.Cutting Bamboos (主席树+二分)

    题意: 有n条柱子,高度为aia_iai​ ,我们有qqq次操作.在l到r的范围内砍yyy次,将所有的树高都砍为0,但是保证每一刀砍出来的长度(砍除树高于该高度的和)都是相同的.问你第xxx次砍的时候 ...

  6. 2022牛客多校联赛第九场 题解

    比赛传送门 作者: fn 目录 签到题 A题 Car Show / 车展 基本题 B题 Two Frogs / 两只青蛙 进阶题 G题 Magic Spells / 魔法咒语 签到题 A题 Car S ...

  7. 24dian(牛客多校第三场)

    24dian(牛客多校第三场) 题意: 给你n张牌,每张牌的大小为1 ~ 13,问这些牌与加减乘除任意组合(可以使用括号),且但所有的有效解在计算过程中都涉及到分数,即非整数,能否组成答案m,如果可以 ...

  8. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  9. 牛客多校第四场【B-Basic Gcd Problem】

    牛客多校第四场[B-Basic Gcd Problem] 题目链接:https://ac.nowcoder.com/acm/contest/5669/B 思路:先要理解公式,多看几个数据基本就会有点想 ...

  10. 牛客多校第三场 B【Classical String Problem】

    牛客多校第三场 B[Classical String Problem] 链接:https://ac.nowcoder.com/acm/contest/5668/B 来源:牛客网 题目描述 Given ...

最新文章

  1. powerbook g4装linux,揭秘:服务器操作系统Linux版本发行
  2. 「图像分割模型」编解码结构SegNet
  3. 皮一皮:到底是土还是士...
  4. 安装elasticsearch-analysis-ik中文分词器
  5. Mac 如何恢复出厂设置
  6. ES6学习--Javascript中的那三个点(...)
  7. PostgreSQL在Linux上的RPM和源码安装
  8. 使用netkit搭pppoe服务器
  9. JavaScript 面试总结
  10. Expect学习笔记(1)
  11. 基于 python + WebDriverAgent 的“跳一跳”小程序高分教程 1
  12. SQL Server2012安装教程
  13. 前端学习/ Day1/HTTP简单易懂/GET POST/HTTP特性/HTTP与HTTPS/HTTP版本演变/加解密数字签名数字证书
  14. 完全激活win server 2012 R2 的方法(亲测可行!)
  15. 跳跃表(Skip list)原理
  16. vue el-descriptions 样式问题
  17. LeetCode 1296. 划分数组为连续数字的集合
  18. key mysql_调整MySQL中的key_reads
  19. 华为电脑怎么把虚拟化打开_【解决方案】华为虚拟化解决方案
  20. 奇怪,发不出去,只能截图发了

热门文章

  1. 反射机制之取得类的结构
  2. 数据可视化Matplotlib库
  3. windows 截图软件——sharex 截图软件的天花板 并且是免费开源的。
  4. ( 转)关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi
  5. Camera-3A AE/AWB/AF
  6. 华为智慧屏鸿蒙应用,华为智慧屏S Pro体验:告诉你鸿蒙OS有多优秀
  7. word设置页眉页码 首页没有页眉(终于搞懂了)
  8. ue小知识点 动画蓝图 ABP的 begin、init和Character的posses的先后
  9. HTML的基本标签及属性
  10. 为什么我们不能坚持?