Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.41 KB | None | 0 0
  1. import static java.lang.Math.acos;
  2. import static java.lang.Math.cos;
  3. import static java.lang.Math.sin;
  4.  
  5. import java.io.*;
  6. import java.math.BigInteger;
  7. import java.sql.Array;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.util.*;
  11.  
  12. public class C {
  13.  
  14. public String expr;
  15. public int index;
  16.  
  17. public double getValue() {
  18. current = -1;
  19. next();
  20. return expression();
  21. }
  22.  
  23. private int current;
  24. private char token;
  25.  
  26. /** Returns next token, but if end of expression has been reached 'Z'+1 is returned */
  27. private void next() {
  28. token = current+1 < expr.length() ? expr.charAt(++current) : (char)0;
  29. }
  30.  
  31. /** Skips current token */
  32. private void skip(char t) {
  33. assert token == t;
  34. next();
  35. }
  36.  
  37. // operand = operand | -operand | '(' expression ')'
  38. private double operand() {
  39. if ('0' <= token && token <= '9') {
  40. double result = 0;
  41. int x = 1;
  42. boolean point = false;
  43. while (('0' <= token && token <= '9') || (token == '.')) {
  44. if (token == '.')
  45. point = true;
  46. if (point) {
  47. x /= 10;
  48. result += (token - '0')*x;
  49. }
  50. else
  51. result = result * 10 + (token -'0');
  52. skip(token);
  53. }
  54. return result;
  55. }
  56. if (token == '(') {
  57. skip('(');
  58. double result = expression();
  59. skip(')');
  60. return result;
  61. }
  62. int stream = token - 'A';
  63. int number = 0;
  64. boolean negative = false;
  65. skip(token);
  66. skip('[');
  67. if (token == '-') {
  68. skip('-');
  69. negative = true;
  70. }
  71. while ('0' <= token && token <= '9') {
  72. number = number * 10 + (token -'0');
  73. skip(token);
  74. }
  75. skip(']');
  76. if (negative)
  77. number = -number;
  78.  
  79. if (index + number < 0)
  80. return 0;
  81. if (index + number >= samples)
  82. return 0;
  83.  
  84. return val[stream][index+number];
  85. }
  86.  
  87. // factor = operand | operand '^' factor
  88. private double factor() {
  89. return operand();
  90. }
  91.  
  92. // term = factor | term '*' factor | term '/' factor
  93. private double term() {
  94. double result = factor();
  95. for(;;) {
  96. if (token == '*') {
  97. skip('*');
  98. result *= factor();
  99. }
  100. else
  101. return result;
  102. }
  103. }
  104.  
  105. // expression = term | expression '+' term | expression '-' term
  106. private double expression() {
  107. double result = term();
  108. for (;;) {
  109. if (token == '+') {
  110. skip('+');
  111. result += term();
  112. }
  113. else
  114. if (token == '-') {
  115. skip('-');
  116. result -= term();
  117. }
  118. else
  119. return result;
  120. }
  121. }
  122.  
  123.  
  124. boolean[] known;
  125. List<Integer>[] depends;
  126. int streams, samples;
  127. int[][] val;
  128. String[] expression;
  129.  
  130. void doIt() throws Exception {
  131. BufferedReader in = new BufferedReader(new FileReader("C.in"));
  132. PrintStream out = new PrintStream("C.out");
  133.  
  134. int T = Integer.parseInt(in.readLine());
  135.  
  136. for (int testCase = 0; testCase < T; testCase++) {
  137. streams = Integer.parseInt(in.readLine());
  138. samples = Integer.parseInt(in.readLine());
  139.  
  140. known = new boolean[26];
  141. boolean[] knownAlready = new boolean[26];
  142. boolean[] have = new boolean[26];
  143. depends = new ArrayList[26];
  144. expression = new String[26];
  145.  
  146. val = new int[26][samples];
  147.  
  148. int countKnowns = 0;
  149.  
  150. for (int i = 0; i < 26; i++) {
  151. Arrays.fill(val[i], Integer.MAX_VALUE);
  152. depends[i] = new ArrayList<Integer>();
  153. }
  154.  
  155. for (int i = 0; i < 26; i++) expression[i] = "";
  156.  
  157. for (int i = 0; i < streams; i++) {
  158. String s = in.readLine();
  159. System.out.println(s);
  160. int stream = s.charAt(0) - 'A';
  161. have[stream] = true;
  162. if (s.indexOf('=') > -1) {
  163. expression[stream] = "";
  164. StringTokenizer str = new StringTokenizer(s);
  165. str.nextToken();
  166. str.nextToken();
  167. while (str.hasMoreTokens())
  168. expression[stream] += str.nextToken();
  169.  
  170. System.out.println(expression[stream]);
  171. for (char c = 'A'; c <= 'Z'; c++)
  172. if (s.indexOf(c, 2) > -1)
  173. depends[stream].add((int)(c - 'A'));
  174. }
  175. else {
  176. countKnowns++;
  177. knownAlready[i] = known[i] = true;
  178. StringTokenizer str = new StringTokenizer(s);
  179. str.nextToken();
  180. str.nextToken();
  181. for (int j = 0; j < samples; j++)
  182. val[stream][j] = Integer.parseInt(str.nextToken());
  183. }
  184. }
  185.  
  186. while (true) {
  187. int stream = -1;
  188. for (int i = 0; i < 26 && stream == -1; i++) {
  189. System.out.println(i + "\t" + known[i] + "\t" + depends[i]);
  190. if (!known[i] && have[i]) {
  191. boolean ok = true;
  192. for (int j : depends[i])
  193. if (!known[j]) {
  194. ok = false;
  195. break;
  196. }
  197. if (ok)
  198. stream = i;
  199. }
  200. }
  201. System.out.println(stream);
  202. if (stream == -1)
  203. break;
  204.  
  205. for (int i = 0; i < samples; i++) {
  206. index = i;
  207. System.out.println(expr = expression[stream]);
  208. val[stream][i] = (int) Math.round(getValue());
  209. }
  210. known[stream] = true;
  211. }
  212.  
  213. out.println("DATA SET #" + (testCase+1));
  214. for (int i = 0; i < 26; i++)
  215. if (!knownAlready[i] && known[i]) {
  216. out.print((i+'A') + " %");
  217. for (int j = 0; j < samples; j++)
  218. out.print(" " + val[i][j]);
  219. out.println();
  220. }
  221. }
  222.  
  223. out.close();
  224. }
  225.  
  226. public static void main(String[] args) throws Exception {
  227. new C().doIt();
  228. }
  229. }
  230.  
  231.  
  232.  
  233. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -65
  234. at C.operand(C.java:84)
  235. at C.factor(C.java:89)
  236. at C.term(C.java:94)
  237. at C.expression(C.java:107)
  238. at C.getValue(C.java:20)
  239. at C.doIt(C.java:208)
  240. at C.main(C.java:227)
  241. A % 10 20 30 20 10
  242. B = A[0] + A[-1]
  243. A[0]+A[-1]
  244. C = 0.5 * ( A[0] + B[0] )
  245. 0.5*(A[0]+B[0])
  246. 0 true []
  247. 1 false [0]
  248. 1
  249. A[0]+A[-1]
  250. A[0]+A[-1]
  251. A[0]+A[-1]
  252. A[0]+A[-1]
  253. A[0]+A[-1]
  254. 0 true []
  255. 1 true [0]
  256. 2 false [0, 1]
  257. 2
  258. 0.5*(A[0]+B[0])
  259. 0.5*(A[0]+B[0])
  260. 0.5*(A[0]+B[0])
  261. 0.5*(A[0]+B[0])
  262. 0.5*(A[0]+B[0])
  263. 0 true []
  264. 1 true [0]
  265. 2 true [0, 1]
  266. 3 false []
  267. 4 false []
  268. 5 false []
  269. 6 false []
  270. 7 false []
  271. 8 false []
  272. 9 false []
  273. 10 false []
  274. 11 false []
  275. 12 false []
  276. 13 false []
  277. 14 false []
  278. 15 false []
  279. 16 false []
  280. 17 false []
  281. 18 false []
  282. 19 false []
  283. 20 false []
  284. 21 false []
  285. 22 false []
  286. 23 false []
  287. 24 false []
  288. 25 false []
  289. -1
  290. Z = 0.5 * Y[0] + 0.5 * B[0]
  291. 0.5*Y[0]+0.5*B[0]
  292. Y % 50 10 50 10 50
  293. B % 10 50 10 50 15
  294. 0 false []
  295. 1 true []
  296. 2 true []
  297. 3 false []
  298. 4 false []
  299. 5 false []
  300. 6 false []
  301. 7 false []
  302. 8 false []
  303. 9 false []
  304. 10 false []
  305. 11 false []
  306. 12 false []
  307. 13 false []
  308. 14 false []
  309. 15 false []
  310. 16 false []
  311. 17 false []
  312. 18 false []
  313. 19 false []
  314. 20 false []
  315. 21 false []
  316. 22 false []
  317. 23 false []
  318. 24 false []
  319. 24
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement