zoukankan      html  css  js  c++  java
  • 2017"百度之星"程序设计大赛

    Arithmetic of Bomb

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


    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
    分析:思路:模拟;根据BNF得到重复个数小于10,比赛时候是用记事本狂敲java代码的,一个心酸;
    下面给出AC代码:
     1 import java.math.BigInteger;
     2 import java.util.Arrays;
     3 import java.util.Scanner;
     4 
     5 import javax.print.attribute.Size2DSyntax;
     6 
     7 public class Main {
     8 
     9     /**
    10      * @param args
    11      */
    12     public static void main(String[] args)
    13     {
    14         Scanner in=new Scanner(System.in);
    15         int mod=1000000007;
    16         while(in.hasNextInt())
    17         {
    18             int T=in.nextInt();
    19             for(int a=1;a<=T;a++)
    20             {
    21                 String s=in.next();
    22                 long ans=0;
    23                 for(int i=0;i<s.length();i++)
    24                 {
    25                     if(s.charAt(i)=='(')
    26                     {
    27                         int pos;
    28                         for(int j=i;;j++)
    29                         {
    30                             if(s.charAt(j)==')')
    31                             {
    32                                 pos=j;
    33                                 break;
    34                             }
    35                         }
    36                         int num=(s.charAt(pos+3)-'0');
    37                         for(int k=0;k<num;k++)
    38                         {
    39                             for(int l=i+1;l<pos;l++)
    40                             {
    41                                 ans=(ans*10+s.charAt(l)-'0')%mod;
    42                             }
    43                         }
    44                         i=pos+4;
    45                     }
    46                     else
    47                         ans=(ans*10+s.charAt(i)-'0')%mod;
    48                 }
    49                 System.out.println(ans);
    50             }
    51             
    52         }
    53     }
    54 
    55 }
  • 相关阅读:
    二十三、java连接oracle数据库操作:jdbc
    四、正则表达式使用
    Linux常用命令大全
    消息队列的常见问题
    JVM:带你查看常见的问题,以及分析处方法
    JVM监控与调优
    缓存总结2
    缓存总结1
    消息队列mq总结
    Java集合Map基本方法
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/7392207.html
Copyright © 2011-2022 走看看