2017百度之星程序设计大赛 - 复赛 Arithmetic of Bomb

http://acm.hdu.edu.cn/showproblem.php?pid=6144

解法:一个简单的模拟

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int t;
 4 int mod=1e9+7;
 5 string s;
 6 int main(){
 7     cin>>t;
 8     while(t--){
 9         int flag=0;
10         long long sum=0;
11         cin>>s;
12         int len=s.length();
13         for(int i=0;i<len;i++){
14             if(s[i]=='('){
15                 flag=1;
16             }
17         }
18         if(flag==0){
19             for(int i=0;i<len;i++){
20                 sum%=mod;
21                 sum*=10;
22                 sum+=s[i]-'0';
23                 sum%=mod;
24             }
25             cout<<sum%mod<<endl;
26         }else{
27             string s1="";
28             string s2="";
29             s+='(';
30             int y=0;
31             int st=0;
32             if(s[0]>='0'&&s[0]<='9'){
33                 while(s[st]!='('){
34                         s2+=s[st];
35                         st++;
36                 }
37             }
38             for(int i=st;i<len;){
39                 if(s[i]=='('){
40                     s1="";
41                     i++;
42                     while(s[i]!=')'){
43                         s1+=s[i];
44                         i++;
45                     }
46                     i++;
47                 }
48                 if(s[i]=='#'){
49                     i+=2;
50                     y=0;
51                     while(s[i]!=')'){
52                         y*=10;
53                         y+=s[i]-'0';
54                         y%=mod;
55                         i++;
56                     }
57                     i++;
58                     for(int j=1;j<=y;j++){
59                         s2+=s1;
60                     }
61                     if(s[i]>='0'&&s[i]<='9'){
62                         while(s[i]!='('){
63                                 s2+=s[i];
64                                 i++;
65                             }
66                     }
67                 }
68             }
69             long long ans=0;
70             int Len=s2.length();
71             for(int i=0;i<Len;i++){
72                 ans*=10;
73                 ans%=mod;
74                 ans+=s2[i]-'0';
75                 ans%=mod;
76             }
77             cout<<ans%mod<<endl;
78         }
79     }
80     return 0;
81 }
82 /*
83 10
84 1(1)#(1)
85 11
86 1(1)#(1)11
87 1111
88 1(1)#(1)101
89 11101
90 1(1)#(1)1000
91 111000
92 01(1)#(1)1000
93 111000
94 */

 

posted @ 2017-08-18 19:43  樱花落舞  阅读(220)  评论(0编辑  收藏  举报