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 */