昔過ぎてもう問題覚えてない。
たしかこれはどっちも解けたはず。
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 LinkedList list = 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 件のコメント:
コメントを投稿