FZU 2108 Mod problem
参考这里:http://blog.csdn.net/q775968375/article/details/8828952
大神说的没错,这跟建树没有半毛线的关系,就是一DFS。。。
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 5 #define LL long long int 6 7 const int MAXN = 1010; 8 9 struct node 10 { 11 LL val, BitWide; 12 node(): val(0), BitWide(0) { } 13 }; 14 15 char str[MAXN]; 16 int MOD; 17 18 LL Qmod( LL a, LL k ) //快速幂模板 19 { 20 LL v = 1; 21 while ( k ) 22 { 23 if ( k & 1 ) v = ( v * a ) % MOD; 24 a = ( a * a ) % MOD; 25 k >>= 1; 26 } 27 return v % MOD; 28 } 29 30 node DFS( int l, int r ) 31 { 32 node ans; //本层括号的数值 33 34 int left, right, cnt; 35 int top = 0; //括号配对专用栈顶指针 36 for ( int i = l; i <= r; ++i ) 37 { 38 if ( str[i] == '[' ) 39 { 40 if ( !top ) left = i + 1; 41 ++top; 42 } 43 else if ( str[i] == ']' ) 44 { 45 --top; 46 if ( !top ) //找到一对配对括号 47 { 48 right = i - 1; 49 ++i; 50 cnt = str[i] - '0'; //本括号内的内容的重复次数 51 node temp = DFS( left, right ); //求得本括号内的数的值,以及位数(10进制下) 52 53 LL base = Qmod( 10, temp.BitWide ); //括号内的数是10的多少次方 54 55 ans.BitWide += cnt * temp.BitWide; //位数加上 56 ans.val = ( ans.val * Qmod( base, cnt ) ) % MOD; //此括号的重复次数是10的多少次方 57 58 LL st = 1, BB = base; 59 60 while ( --cnt ) //这里不好解释,我费解了半天,等等画个图贴上来 61 { 62 st += BB; 63 BB = ( BB * base ) % MOD; 64 st %= MOD; 65 } 66 67 temp.val = (temp.val * st) % MOD; 68 ans.val = ( ans.val + temp.val ) % MOD; 69 } 70 } 71 else if ( !top ) 72 { 73 ans.val = ans.val * 10 + str[i] - '0'; 74 ans.val %= MOD; 75 ++ans.BitWide; 76 } 77 } 78 79 return ans; 80 } 81 82 int main() 83 { 84 int T; 85 scanf( "%d", &T ); 86 while ( T-- ) 87 { 88 scanf( "%s%lld", str, &MOD ); 89 node ans = DFS( 0, strlen(str) - 1 ); 90 printf("%lld\n", ans.val ); 91 } 92 return 0; 93 }
转载于:https://www.cnblogs.com/GBRgbr/archive/2013/05/14/3078280.html
FZU 2108 Mod problem相关推荐
- FZU 2214 Knapsack problem
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2214 题 意:给你一个背包,让你往里面尽量加价值总和多的物品. 思 路:是个01背 ...
- FZU 2214 Knapsack problem(背包问题)
Description 题目描述 Given a set of n items, each with a weight w[i] and a value v[i], determine a way t ...
- FZU 1692 Key problem
FZU_1692 首先感觉输入数据里面的L和R应该反过来读取即先读入R再读入L,要不然样例算不出来,不知道是不是我理解错题意了. 矩阵不难构造,但这个题让进一步注意到了矩阵运算中的常熟优化: ①由于递 ...
- 【计算几何】FZU Problem 2270 Two Triangles
http://acm.fzu.edu.cn/problem.php?pid=2270 [题意] 给定6到10个点,从中选出6个不同的点组成两个三角形,使其中一个三角形可以通过另一个三角形平移和旋转得到 ...
- FZU Problem 2168 防守阵地 I
http://acm.fzu.edu.cn/problem.php?pid=2168 题目大意: 给定n个数和m,要求从n个数中选择连续的m个,使得a[i]*1+a[i+1]*2+--a[i+m]*m ...
- Problem 2238 Daxia Wzc's problem 1627 瞬间移动
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1627 http://acm.fzu.edu.cn/problem.php ...
- 求 A^B mod C. (1=A,C=1000000000,1=B=10^1000000).(fzu1759,hdu3221,hdu4335)
题目:http://acm.fzu.edu.cn/problem.php?pid=1759 也算是快速幂的一题了,只不过这里的指数B特别大.需要用到一个公式: A^x = A^(x % Phi(C) ...
- FZU 1402 猪的安家 中国剩余定理
http://acm.fzu.edu.cn/problem.php?pid=1402 逗比题..和前面那题一样解就行了... 反正都是素数,就把中国剩余定理拓展一下...普及姿势好了: 逆元: 对于同 ...
- FZU 2129 子序列个数 (递推dp)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2129 dp[i]表示前i个数的子序列个数 当a[i]在i以前出现过,dp[i] = dp[i - 1]*2 - ...
最新文章
- VMware 12.0 在安装的时候出现 microsoft runtime dll
- django 快速搭建blog
- JVM内存堆布局图解分析
- 吴恩达深度学习神经网络基础编程作业Planar data classification with one hidden layer
- 04-Mysql----初识sql语句
- ANSYS模态分析详细步骤记录
- [No000030]程序员节发点别的:中国教育整个把人脑子搞坏了-易中天
- java程序员 thinkpad_JAVA程序员笔记本电脑推荐?
- 将无线鼠标改造成有线鼠标
- 小程序发布上线-微信小程序开发-视频教程17
- 免费收听--第2版招投标软件项目管理实战课
- C++学习系列(三)—— 泛型编程(STL)
- linux的c文件报错for,linux c 编译错误 conflicting types for 的解决办法
- java中输出一天每半个小时的时间段
- java 成绩_java输出各种学生成绩
- Delphi控件-复合控件
- Scratch学习有什么优点
- .npy文件的打开方式
- 7-3 最长公共前后缀
- Python绘制论文曲线图
热门文章
- 集合的常用方法(增加、删除、并集、交集、差集、对等差分、超集和子集)
- 计算机未来的发展趋势三百字,数字媒体毕业论文5000字_大专毕业论文5000字_计算机类毕业论文5000字文库...
- 新版微信不停跳转到小程序_如何设置跳转微信小程序
- mysql 复制_MySQL的复制功能
- phalapi可以依赖注入么_phalapi-进阶篇8(PhalApi能带来什么和进阶篇总结)
- 暖冬福利放送,送3本技术好书
- 在pycharm/IDEA里编辑latex:TeXiFy-IDEA/Pycharm
- 音乐人高嘉丰在 Opensea 发布音乐 NFT
- Ark CEO:本次比特币下跌属于健康回调
- SAP License:SAP中的容差