Guest User

Untitled

a guest
Jan 30th, 2012
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.07 KB | None | 0 0
  1.     public void solve() throws Exception {
  2.         int t = nextInt();
  3.         for (int T = 1; T <= t; T++) {
  4.             int answer = Integer.MAX_VALUE / 2;
  5.             int S = nextInt();
  6.             int ans [] = new int [S + 1];
  7.             Arrays.fill (ans, Integer.MAX_VALUE / 2);
  8.            
  9.             int cur [][] = new int [2][S + 5];
  10.             for (int i = 1; i <= S + 4; i++)
  11.                 cur [0][i] = 1;
  12.            
  13.             ans [1] = 1;
  14.            
  15.             int p = 1;
  16.            
  17.             global :
  18.             for (int dist = 2, j = 2; ; dist += 2, j++) {
  19.                 for (int i = j, plus = 0; ; i++, plus++) {
  20.                     if (i == j) {
  21.                         cur[p][i] = cur[p ^ 1][i] + cur [p ^ 1][i];
  22.                         if (cur[p][i] > S) break global;
  23.                         int value = cur[p][i];
  24.                         ans [value] = min (ans[value], dist + plus);
  25.                     } else {
  26.                         cur[p][i] = cur[p ^ 1][i] + cur[p][i - 1];
  27.                         if (cur[p][i] > S) break;
  28.                         int value = cur[p][i];
  29.                         ans [value] = min (ans[value], dist + plus);
  30.                     }
  31.                 }
  32.                 p ^= 1;
  33.             }
  34.             for (int i = 1; i <= S; i++) {
  35.                 if (S % i == 0) {
  36.                     int j = S / i;
  37.                     answer = min (answer, ans[i] + ans[j]);
  38.                 }
  39.             }
  40.             out.println("Case #"+T+": "+answer);
  41.         }
  42.     }
Advertisement
Add Comment
Please, Sign In to add comment