Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void solve() throws Exception {
- int t = nextInt();
- for (int T = 1; T <= t; T++) {
- int answer = Integer.MAX_VALUE / 2;
- int S = nextInt();
- int ans [] = new int [S + 1];
- Arrays.fill (ans, Integer.MAX_VALUE / 2);
- int cur [][] = new int [2][S + 5];
- for (int i = 1; i <= S + 4; i++)
- cur [0][i] = 1;
- ans [1] = 1;
- int p = 1;
- global :
- for (int dist = 2, j = 2; ; dist += 2, j++) {
- for (int i = j, plus = 0; ; i++, plus++) {
- if (i == j) {
- cur[p][i] = cur[p ^ 1][i] + cur [p ^ 1][i];
- if (cur[p][i] > S) break global;
- int value = cur[p][i];
- ans [value] = min (ans[value], dist + plus);
- } else {
- cur[p][i] = cur[p ^ 1][i] + cur[p][i - 1];
- if (cur[p][i] > S) break;
- int value = cur[p][i];
- ans [value] = min (ans[value], dist + plus);
- }
- }
- p ^= 1;
- }
- for (int i = 1; i <= S; i++) {
- if (S % i == 0) {
- int j = S / i;
- answer = min (answer, ans[i] + ans[j]);
- }
- }
- out.println("Case #"+T+": "+answer);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment