fork download
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintWriter;
  5. import java.util.Stack;
  6. import java.util.StringTokenizer;
  7.  
  8. import javax.script.ScriptEngine;
  9. import javax.script.ScriptEngineManager;
  10. import javax.script.ScriptException;
  11.  
  12. class Engine {
  13.  
  14. public static void main(final String args[]) throws IOException {
  15. final PrintWriter pw = new PrintWriter(System.out);
  16. final Stack<Long> stck = new Stack<Long>();
  17. final Stack<String> opstck = new Stack<String>();
  18.  
  19. final ScriptEngineManager manager = new ScriptEngineManager();
  20. final ScriptEngine engine = manager.getEngineByName("JavaScript");
  21.  
  22. final char flag = br.readLine().charAt(0);
  23.  
  24. // int t = Integer.parseInt(br.readLine());
  25. long timer = 0;
  26. long start;
  27. int t = 30000;
  28. while (t-- != 0) {
  29. String temp = getLine(t);
  30. while (temp.length() == 0)
  31. temp = br.readLine();
  32. final StringTokenizer st = new StringTokenizer(temp);
  33. while (st.hasMoreTokens()) {
  34. final String c = st.nextToken();
  35. if (c.equals("="))
  36. continue;
  37.  
  38. if (c.equals("+") || c.equals("-") || c.equals("*") || c.equals("/"))
  39. opstck.push(c);
  40. else {
  41. final long num = Long.parseLong(c);
  42. stck.push(num);
  43. try {
  44. if (!opstck.empty()) {
  45. final long last = stck.pop();
  46. final String op = opstck.pop();
  47. final long first = stck.pop();
  48.  
  49. start = System.currentTimeMillis();
  50. switch (flag) {
  51. case 'E':
  52. final Object evalRes = engine.eval(first + op + last);
  53. final double result = Double.parseDouble(evalRes.toString());
  54. stck.push((long) result);
  55. break;
  56. case 'S':
  57. final long rs = myEvalString(first + op + last);
  58.  
  59. stck.push(rs);
  60. break;
  61. case 'L':
  62. final long rl = myEvalLong(first, op.charAt(0), last);
  63.  
  64. stck.push(rl);
  65. break;
  66. }
  67. timer += System.currentTimeMillis() - start;
  68.  
  69. // stck.push((long) result);
  70. }
  71. } catch (final ScriptException ex) {
  72. ex.printStackTrace();
  73. }//catch block
  74. }
  75. }
  76. //
  77. //pw.println(stck.pop()); // no printing = no I/O
  78.  
  79. }
  80. //pw.flush();
  81. System.out.println("time: " + timer + " (ms)");
  82. }
  83.  
  84. private static long myEvalString(final String s) throws ScriptException {
  85. for (int i = 0; i < s.length(); i++) {
  86. final char c = s.charAt(i);
  87. if (c >= '0' && c <= '9')
  88. continue;
  89. return myEvalLong(Long.parseLong(s.substring(0, i)), c, Long.parseLong(s.substring(i + 1)));
  90. }
  91. // return 0;
  92. throw new IllegalStateException();
  93. }
  94.  
  95. private static long myEvalLong(final long a, final char op, final long b) throws ScriptException {
  96. switch (op) {
  97. case '+':
  98. return a + b;
  99. case '-':
  100. return a - b;
  101. case '*':
  102. return a * b;
  103. case '/':
  104. return a / b;
  105. }
  106. return 0;
  107. }
  108.  
  109. private static String getLine(final int t) {
  110. final StringBuilder buff = new StringBuilder();
  111. buff.append(t + 1).append(" * ").append(t + 2).append(" =\n");
  112. return buff.toString();
  113. }
  114.  
  115. }
  116.  
Success #stdin #stdout 0.25s 381440KB
stdin
L
stdout
time: 12 (ms)