[HDOJ6144] Arithmetic of Bomb(模拟)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6144

XJB模拟一下就行,反正最多重复⑨次。

非要说用上什么数学原理的话,大概就是(a+b)%mod = (a%mod)+(b%mod)%mod,(a*b)%mod。。。吧

  1 /*
  2 ━━━━━┒ギリギリ♂ eye!
  3 ┓┏┓┏┓┃キリキリ♂ mind!
  4 ┛┗┛┗┛┃\○/
  5 ┓┏┓┏┓┃ /
  6 ┛┗┛┗┛┃ノ)
  7 ┓┏┓┏┓┃
  8 ┛┗┛┗┛┃
  9 ┓┏┓┏┓┃
 10 ┛┗┛┗┛┃
 11 ┓┏┓┏┓┃
 12 ┛┗┛┗┛┃
 13 ┓┏┓┏┓┃
 14 ┃┃┃┃┃┃
 15 ┻┻┻┻┻┻
 16 */
 17 #include <bits/stdc++.h>
 18 using namespace std;
 19 #define fr first
 20 #define sc second
 21 #define cl clear
 22 #define BUG puts("here!!!")
 23 #define W(a) while(a--)
 24 #define pb(a) push_back(a)
 25 #define Rint(a) scanf("%d", &a)
 26 #define Rll(a) scanf("%I64d", &a)
 27 #define Rs(a) scanf("%s", a)
 28 #define Cin(a) cin >> a
 29 #define FRead() freopen("in", "r", stdin)
 30 #define FWrite() freopen("out", "w", stdout)
 31 #define Rep(i, len) for(int i = 0; i < (len); i++)
 32 #define For(i, a, len) for(int i = (a); i < (len); i++)
 33 #define Cls(a) memset((a), 0, sizeof(a))
 34 #define Clr(a, x) memset((a), (x), sizeof(a))
 35 #define Full(a) memset((a), 0x7f7f7f, sizeof(a))
 36 #define lrt rt << 1
 37 #define rrt rt << 1 | 1
 38 #define pi 3.14159265359
 39 #define RT return
 40 #define lowbit(x) x & (-x)
 41 #define onenum(x) __builtin_popcount(x)
 42 typedef long long LL;
 43 typedef long double LD;
 44 typedef unsigned long long ULL;
 45 typedef pair<int, int> pii;
 46 typedef pair<string, int> psi;
 47 typedef pair<LL, LL> pll;
 48 typedef map<string, int> msi;
 49 typedef vector<int> vi;
 50 typedef vector<LL> vl;
 51 typedef vector<vl> vvl;
 52 typedef vector<bool> vb;
 53 
 54 const LL mod = 1e9+7;
 55 const int maxn = 1001000;
 56 char s[maxn];
 57 int n;
 58 int digit[maxn];
 59 LL ret;
 60 
 61 LL mul(LL x, LL n) {
 62     LL ret = 1;
 63     while(n) {
 64         if(n & 1) ret = ret * x % mod;
 65         x = x * x % mod;
 66         n >>= 1;
 67     }
 68     return ret;
 69 }
 70 
 71 signed main() {
 72     // FRead();
 73     int T;
 74     Rint(T);
 75     W(T) {
 76         Rs(s+1); n = strlen(s+1);
 77         ret = 0;
 78         int i = 1;
 79         while(i <= n) {
 80             if(s[i] == '(') {
 81                 int j = i + 1, k = 0;
 82                 LL x = 0;
 83                 while(s[j] != ')') {
 84                     digit[++k] = s[j] - '0'; j++;
 85                 }
 86                 j++; j += 2;
 87                 while(s[j] != ')') {
 88                     x = x * 10 + s[j] - '0';
 89                     j++;
 90                 }
 91                 i = j + 1;
 92                 LL y = k * x;
 93                 For(j, k+1, y+1) digit[j] = digit[(j-1)%k+1];
 94                 For(j, 1, y+1) {
 95                     ret = ret * 10 % mod;
 96                     ret += digit[j];
 97                     ret %= mod;
 98                 }
 99             }
100             else {
101                 int j = i, k = 0;
102                 while(s[j] != '(' && s[j]) {
103                     digit[++k] = s[j++] - '0';
104                 }
105                 i = j;
106                 For(j, 1, k+1) {
107                     ret = ret * 10 % mod;
108                     ret += digit[j];
109                     ret %= mod;
110                 }
111             }
112         }
113         printf("%I64d
", ret);
114     }
115     RT 0;
116 }
原文地址:https://www.cnblogs.com/kirai/p/7392052.html