zoukankan      html  css  js  c++  java
  • hdu 6144 Arithmetic of Bomb

    Arithmetic of Bomb

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 151    Accepted Submission(s): 108


    Problem Description
    众所周知,度度熊非常喜欢数字。

    它最近在学习小学算术,第一次发现这个世界上居然存在两位数,三位数……甚至N位数!

    但是这回的算术题可并不简单,由于含有表示bomb的#号,度度熊称之为 Arithmetic of Bomb。



    Bomb Number中的bomb,也就是#号,会展开一些数字,这会导致最终展开的数字超出了度度熊所能理解的范畴。比如”(1)#(3)”表示”1”出现了3次,将会被展开为”111”,

    同理,”(12)#(2)4(2)#(3)”将会被展开为”12124222”。

    为了方便理解,下面给出了Bomb Number的BNF表示。

    ```
    <bomb number> := <bomb term> | <bomb number> <bomb term>
    <bomb term> := <number> | '(' <number> ')' '#' '(' <non-zero-digit> ')'
    <number> := <digit> | <digit> <number>
    <digit> := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
    <non-zero-digit> := '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
    ```

    请将Bomb Number中所有的#号展开,由于数字可能很长,结果对 1 000 000 007 取模。
     
    Input
    第一行为T,表示输入数据组数。

    每组数据包含一个Bomb Expression。


    - 1≤T≤100

    - 1≤length(Bomb Number)≤1000
     
    Output
    对每组数据输出表达式的结果,结果对 1 000 000 007 取模。
     
    Sample Input
    4
    1
    (1)#(3)
    (12)#(2)4(2)#(3)
    (12)#(5)
    Sample Output
    1
    111
    12124222
    212121205
     
     
    Source
    Recommend
    We have carefully selected several similar problems for you:  6149 6148 6147 6146 6145 
    #include <iostream>
    #include<bits/stdc++.h>
    using namespace std;
    const long long mod=1e9+7;
    int T,i,len;
    long long ans;
    char ch[100005];
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            scanf("%s",&ch);
    
            ans=0;
            for(i=0;ch[i];i++)
            {
                if (isdigit(ch[i])) {ans=(ans*10+ch[i]-'0')%mod; continue;}
                long long pos=1,k=0;
                for(++i;ch[i]!=')';i++)
                {
                    k=(k*10+ch[i]-'0')%mod;
                    pos=pos*10%mod;
                }
                for(int j=1;j<=ch[i+3]-'0';j++)
                    ans=(ans*pos+k)%mod;
               i+=4;
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    第二十章 用户管理(一)
    第十九章 Linux中常用字符的特殊含义
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/stepping/p/7395651.html
Copyright © 2011-2022 走看看