参考这里: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相关推荐

  1. FZU 2214 Knapsack problem

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2214 题        意:给你一个背包,让你往里面尽量加价值总和多的物品. 思        路:是个01背 ...

  2. 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 ...

  3. FZU 1692 Key problem

    FZU_1692 首先感觉输入数据里面的L和R应该反过来读取即先读入R再读入L,要不然样例算不出来,不知道是不是我理解错题意了. 矩阵不难构造,但这个题让进一步注意到了矩阵运算中的常熟优化: ①由于递 ...

  4. 【计算几何】FZU Problem 2270 Two Triangles

    http://acm.fzu.edu.cn/problem.php?pid=2270 [题意] 给定6到10个点,从中选出6个不同的点组成两个三角形,使其中一个三角形可以通过另一个三角形平移和旋转得到 ...

  5. 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 ...

  6. Problem 2238 Daxia Wzc's problem 1627 瞬间移动

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1627 http://acm.fzu.edu.cn/problem.php ...

  7. 求 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) ...

  8. FZU 1402 猪的安家 中国剩余定理

    http://acm.fzu.edu.cn/problem.php?pid=1402 逗比题..和前面那题一样解就行了... 反正都是素数,就把中国剩余定理拓展一下...普及姿势好了: 逆元: 对于同 ...

  9. FZU 2129 子序列个数 (递推dp)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2129 dp[i]表示前i个数的子序列个数 当a[i]在i以前出现过,dp[i] = dp[i - 1]*2 - ...

最新文章

  1. VMware 12.0 在安装的时候出现 microsoft runtime dll
  2. django 快速搭建blog
  3. JVM内存堆布局图解分析
  4. 吴恩达深度学习神经网络基础编程作业Planar data classification with one hidden layer
  5. 04-Mysql----初识sql语句
  6. ANSYS模态分析详细步骤记录
  7. [No000030]程序员节发点别的:中国教育整个把人脑子搞坏了-易中天
  8. java程序员 thinkpad_JAVA程序员笔记本电脑推荐?
  9. 将无线鼠标改造成有线鼠标
  10. 小程序发布上线-微信小程序开发-视频教程17
  11. 免费收听--第2版招投标软件项目管理实战课
  12. C++学习系列(三)—— 泛型编程(STL)
  13. linux的c文件报错for,linux c 编译错误 conflicting types for 的解决办法
  14. java中输出一天每半个小时的时间段
  15. java 成绩_java输出各种学生成绩
  16. Delphi控件-复合控件
  17. Scratch学习有什么优点
  18. .npy文件的打开方式
  19. 7-3 最长公共前后缀
  20. Python绘制论文曲线图

热门文章

  1. 集合的常用方法(增加、删除、并集、交集、差集、对等差分、超集和子集)
  2. 计算机未来的发展趋势三百字,数字媒体毕业论文5000字_大专毕业论文5000字_计算机类毕业论文5000字文库...
  3. 新版微信不停跳转到小程序_如何设置跳转微信小程序
  4. mysql 复制_MySQL的复制功能
  5. phalapi可以依赖注入么_phalapi-进阶篇8(PhalApi能带来什么和进阶篇总结)
  6. 暖冬福利放送,送3本技术好书
  7. 在pycharm/IDEA里编辑latex:TeXiFy-IDEA/Pycharm
  8. 音乐人高嘉丰在 Opensea 发布音乐 NFT
  9. Ark CEO:本次比特币下跌属于健康回调
  10. SAP License:SAP中的容差