fork download
  1. import java.util.*;
  2. class Main{
  3. static int t[];
  4. static int T[];
  5. static int mult;
  6. static String now;
  7. static boolean isnum(char c){
  8. if(c>='0'&&c<='9')return true;
  9. return false;
  10. }
  11. static boolean islower(char c){
  12. if(c>='a'&&c<='z')return true;
  13. return false;
  14. }
  15. static boolean isupper(char c){
  16. if(c>='A'&&c<='Z')return true;
  17. return false;
  18. }
  19. static void solve(int a,int b){//[a,b)
  20. for(int i=a;i<b;i++){
  21. if(isupper(now.charAt(i))){
  22. if(i<b-1&&islower(now.charAt(i+1))){
  23. if(i<b-2&&isnum(now.charAt(i+2))){
  24. if(i<b-3&&isnum(now.charAt(i+3))){
  25. if(i<b-4&&isnum(now.charAt(i+4))){
  26. if(i<b-5&&isnum(now.charAt(i+5))){
  27. if(i<b-6&&isnum(now.charAt(i+6))){
  28. t[now.charAt(i)*256+now.charAt(i+1)]+=mult*((int)(now.charAt(i+2)-'0')*10000+(int)(now.charAt(i+3)-'0')*1000+(int)(now.charAt(i+4)-'0')*100+(int)(now.charAt(i+5)-'0')*10+(int)(now.charAt(i+6)-'0'));
  29. i+=6;
  30. }else{
  31. t[now.charAt(i)*256+now.charAt(i+1)]+=mult*((int)(now.charAt(i+2)-'0')*1000+(int)(now.charAt(i+3)-'0')*100+(int)(now.charAt(i+4)-'0')*10+(int)(now.charAt(i+5)-'0'));
  32. i+=5;
  33. }
  34. }else{
  35. t[now.charAt(i)*256+now.charAt(i+1)]+=mult*((int)(now.charAt(i+2)-'0')*100+(int)(now.charAt(i+3)-'0')*10+(int)(now.charAt(i+4)-'0'));
  36. i+=4;
  37. }
  38. }else{
  39. t[now.charAt(i)*256+now.charAt(i+1)]+=mult*((int)(now.charAt(i+2)-'0')*10+(int)(now.charAt(i+3)-'0'));
  40. i+=3;
  41. }
  42. }else{
  43. t[now.charAt(i)*256+now.charAt(i+1)]+=mult*(int)(now.charAt(i+2)-'0');
  44. i+=2;
  45. }
  46. }else{
  47. t[now.charAt(i)*256+now.charAt(i+1)]+=mult;
  48. i++;
  49. }
  50. }else{
  51. if(i<b-1&&isnum(now.charAt(i+1))){
  52. if(i<b-2&&isnum(now.charAt(i+2))){
  53. if(i<b-3&&isnum(now.charAt(i+3))){
  54. if(i<b-4&&isnum(now.charAt(i+4))){
  55. if(i<b-5&&isnum(now.charAt(i+5))){
  56. t[now.charAt(i)*256]+=mult*((int)(now.charAt(i+1)-'0')*10000+(int)(now.charAt(i+2)-'0')*1000+(int)(now.charAt(i+3)-'0')*100+(int)(now.charAt(i+4)-'0')*10+(int)(now.charAt(i+5)-'0'));
  57. i+=5;
  58. }else{
  59. t[now.charAt(i)*256]+=mult*((int)(now.charAt(i+1)-'0')*1000+(int)(now.charAt(i+2)-'0')*100+(int)(now.charAt(i+3)-'0')*10+(int)(now.charAt(i+4)-'0'));
  60. i+=4;
  61. }
  62. }else{
  63. t[now.charAt(i)*256]+=mult*((int)(now.charAt(i+1)-'0')*100+(int)(now.charAt(i+2)-'0')*10+(int)(now.charAt(i+3)-'0'));
  64. i+=3;
  65. }
  66. }else{
  67. t[now.charAt(i)*256]+=mult*((int)(now.charAt(i+1)-'0')*10+(int)(now.charAt(i+2)-'0'));
  68. i+=2;
  69. }
  70. }else{
  71. t[now.charAt(i)*256]+=mult*(int)(now.charAt(i+1)-'0');
  72. i++;
  73. }
  74. }else{
  75. t[now.charAt(i)*256]+=mult;
  76. }
  77. }
  78. }else if(now.charAt(i)=='('){
  79. int count=1;
  80. for(int j=i+1;;j++){
  81. if(now.charAt(j)=='(')count++;
  82. if(now.charAt(j)==')')count--;
  83. if(count==0){
  84. if(j<b-1&&isnum(now.charAt(j+1))){
  85. if(j<b-2&&isnum(now.charAt(j+2))){
  86. if(j<b-3&&isnum(now.charAt(j+3))){
  87. if(j<b-4&&isnum(now.charAt(j+4))){
  88. if(j<b-5&&isnum(now.charAt(j+5))){
  89. mult*=((int)(now.charAt(j+1)-'0')*10000+(int)(now.charAt(j+2)-'0')*1000+(int)(now.charAt(j+3)-'0')*100+(int)(now.charAt(j+4)-'0')*10+(int)(now.charAt(j+5)-'0'));
  90. solve(i+1,j);
  91. mult/=((int)(now.charAt(j+1)-'0')*10000+(int)(now.charAt(j+2)-'0')*1000+(int)(now.charAt(j+3)-'0')*100+(int)(now.charAt(j+4)-'0')*10+(int)(now.charAt(j+5)-'0'));
  92. i=j+5;
  93. }else{
  94. mult*=((int)(now.charAt(j+1)-'0')*1000+(int)(now.charAt(j+2)-'0')*100+(int)(now.charAt(j+3)-'0')*10+(int)(now.charAt(j+4)-'0'));
  95. solve(i+1,j);
  96. mult/=((int)(now.charAt(j+1)-'0')*1000+(int)(now.charAt(j+2)-'0')*100+(int)(now.charAt(j+3)-'0')*10+(int)(now.charAt(j+4)-'0'));
  97. i=j+4;
  98. }
  99. }else{
  100. mult*=((int)(now.charAt(j+1)-'0')*100+(int)(now.charAt(j+2)-'0')*10+(int)(now.charAt(j+3)-'0'));
  101. solve(i+1,j);
  102. mult/=((int)(now.charAt(j+1)-'0')*100+(int)(now.charAt(j+2)-'0')*10+(int)(now.charAt(j+3)-'0'));
  103. i=j+3;
  104. }
  105. }else{
  106. mult*=((int)(now.charAt(j+1)-'0')*10+(int)(now.charAt(j+2)-'0'));
  107. solve(i+1,j);
  108. mult/=((int)(now.charAt(j+1)-'0')*10+(int)(now.charAt(j+2)-'0'));
  109. i=j+2;
  110. }
  111. }else{
  112. mult*=(int)(now.charAt(j+1)-'0');
  113. solve(i+1,j);
  114. mult/=(int)(now.charAt(j+1)-'0');
  115. i=j+1;
  116. }
  117. }else{
  118. solve(i+1,j);
  119. i=j;
  120. }
  121. break;
  122. }
  123. }
  124. }
  125. }
  126. }
  127. public static void main(String[] args){
  128. Scanner s=new Scanner(System.in);
  129. String str=s.next();
  130. t=new int[65536];
  131. T=new int[65536];
  132. String val[]=str.split("\\+");
  133. for(int i=0;i<val.length;i++){
  134. mult=1;
  135. now=val[i];
  136. int q=val[i].length();
  137. if(q>0&&isnum(val[i].charAt(0))){
  138. if(q>1&&isnum(val[i].charAt(1))){
  139. if(q>2&&isnum(val[i].charAt(2))){
  140. if(q>3&&isnum(val[i].charAt(3))){
  141. if(q>4&&isnum(val[i].charAt(4))){
  142. mult=(int)(val[i].charAt(0)-'0')*10000+(int)(val[i].charAt(1)-'0')*1000+(int)(val[i].charAt(2)-'0')*100+(int)(val[i].charAt(3)-'0')*10+(int)(val[i].charAt(4)-'0');
  143. solve(5,val[i].length());
  144. }else{
  145. mult=(int)(val[i].charAt(0)-'0')*1000+(int)(val[i].charAt(1)-'0')*100+(int)(val[i].charAt(2)-'0')*10+(int)(val[i].charAt(3)-'0');
  146. solve(4,val[i].length());
  147. }
  148. }else{
  149. mult=(int)(val[i].charAt(0)-'0')*100+(int)(val[i].charAt(1)-'0')*10+(int)(val[i].charAt(2)-'0');
  150. solve(3,val[i].length());
  151. }
  152. }else{
  153. mult=(int)(val[i].charAt(0)-'0')*10+(int)(val[i].charAt(1)-'0');
  154. solve(2,val[i].length());
  155. }
  156. }else{
  157. mult=(int)(val[i].charAt(0)-'0');
  158. solve(1,val[i].length());
  159. }
  160. }else solve(0,val[i].length());
  161. }
  162. for(int i=0;i<65536;i++){
  163. T[i]=t[i];
  164. // if(T[i]>0)System.out.println(""+(char)(i/256)+(char)(i%256)+":"+T[i]);
  165. t[i]=0;
  166. }
  167. int a=s.nextInt();
  168. for(int j=0;j<a;j++){
  169. String next=s.next();
  170. val=next.split("\\+");
  171. for(int i=0;i<65536;i++)t[i]=0;
  172. for(int i=0;i<val.length;i++){
  173. int q=val[i].length();
  174. now=val[i];
  175. mult=1;
  176. if(q>0&&isnum(val[i].charAt(0))){
  177. if(q>1&&isnum(val[i].charAt(1))){
  178. if(q>2&&isnum(val[i].charAt(2))){
  179. if(q>3&&isnum(val[i].charAt(3))){
  180. if(q>4&&isnum(val[i].charAt(4))){
  181. mult=(int)(val[i].charAt(0)-'0')*10000+(int)(val[i].charAt(1)-'0')*1000+(int)(val[i].charAt(2)-'0')*100+(int)(val[i].charAt(3)-'0')*10+(int)(val[i].charAt(4)-'0');
  182. solve(5,val[i].length());
  183. }else{
  184. mult=(int)(val[i].charAt(0)-'0')*1000+(int)(val[i].charAt(1)-'0')*100+(int)(val[i].charAt(2)-'0')*10+(int)(val[i].charAt(3)-'0');
  185. solve(4,val[i].length());
  186. }
  187. }else{
  188. mult=(int)(val[i].charAt(0)-'0')*100+(int)(val[i].charAt(1)-'0')*10+(int)(val[i].charAt(2)-'0');
  189. solve(3,val[i].length());
  190. }
  191. }else{
  192. mult=(int)(val[i].charAt(0)-'0')*10+(int)(val[i].charAt(1)-'0');
  193. solve(2,val[i].length());
  194. }
  195. }else{
  196. mult=(int)(val[i].charAt(0)-'0');
  197. solve(1,val[i].length());
  198. }
  199. }else solve(0,val[i].length());
  200. }
  201. boolean ok=true;
  202. for(int i=0;i<65536;i++){
  203. if(T[i]!=t[i])ok=false;
  204. // if(T[i]>0)System.out.println(""+(char)(i/256)+(char)(i%256)+":"+t[i]);
  205. }
  206. if(ok)System.out.println(str+"=="+next);
  207. else System.out.println(str+"!="+next);
  208. }
  209. }
  210. }
Runtime error #stdin #stdout #stderr 0.1s 380672KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Exception in thread "main" java.util.NoSuchElementException
	at java.util.Scanner.throwFor(Scanner.java:907)
	at java.util.Scanner.next(Scanner.java:1416)
	at Main.main(Main.java:129)