昔過ぎてもう問題覚えてない。
たしかこれはどっちも解けたはず。
import java.util.Arrays; public class MinDifference { public double EPS = 1e-6; public int closestElements(int A0, int X, int Y, int M, int n) { int[] a = new int[n]; a[0] = A0; for(int i = 1; i < n; i++) { a[i] = (a[i - 1] * X + Y) % M; } Arrays.sort(a); int res = Integer.MAX_VALUE; for(int i = a.length - 1; i > 0; i--) { res = Math.min(res, a[i] - a[i - 1]); } return res; } public void tr(Object... o) { System.out.println(o.length > 1 || o[0].getClass().isArray() ? Arrays.deepToString(o) : o[0]); } }
激しい。
こんなことしなくても解ける・・・
import java.util.Arrays; import java.util.LinkedList; public class CountExpressions { public double EPS = 1e-6; private LinkedListlist = new LinkedList (); private int res = 0; private int ans; public int calcExpressions(int x, int y, int val) { ans = val; list.add(x); list.add(x); list.add(y); list.add(y); dfs("+", 0, list.poll(), 0); list = new LinkedList (); list.add(x); list.add(y); list.add(x); list.add(y); dfs("+", 0, list.poll(), 0); list = new LinkedList (); list.add(x); list.add(y); list.add(y); list.add(x); dfs("+", 0, list.poll(), 0); list = new LinkedList (); list.add(y); list.add(y); list.add(x); list.add(x); dfs("+", 0, list.poll(), 0); list = new LinkedList (); list.add(y); list.add(x); list.add(x); list.add(y); dfs("+", 0, list.poll(), 0); list = new LinkedList (); list.add(y); list.add(x); list.add(y); list.add(x); dfs("+", 0, list.poll(), 0); tr(res); return res; } private void dfs(String s, long val, int v, int n) { if(s.equals("+")) { val += (long)v; } else if(s.equals("-")) { val -= (long)v; } else { val *= (long)v; } if(n > 2) { if(val == ans) { res++; } list.add(0, v); return; } dfs("+", val, list.poll(), n + 1); dfs("-", val, list.poll(), n + 1); dfs("*", val, list.poll(), n + 1); list.add(0, v); } public void tr(Object... o) { System.out.println(o.length > 1 || o[0].getClass().isArray() ? Arrays.deepToString(o) : o[0]); } }
0 件のコメント:
コメントを投稿