Czy poprawne rozwiazanie?

0

Witam, zastanawiam się czy moje rozwiązanie do zadania http://www.spoj.com/problems/AGGRCOW/ jest poprawne.

Chodzi głównie o to, czy nie pominąłem jakichś przypadków (albo w ogóle może logika leży i tego zadania nie rozwiązuje :P, choć dla pierwszych lepszych danych wejściowych jest OK)

oto rozwiązanie:

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
  public static void main(String[] args) {
    try {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      OutputStream out = new BufferedOutputStream(System.out);
      int n = Integer.parseInt(in.readLine());
      for (int i = 0; i < n; ++i) {
        StringTokenizer tokenizer = new StringTokenizer(in.readLine());
        int ncows = Integer.parseInt(tokenizer.nextToken());
        int c = Integer.parseInt(tokenizer.nextToken());
        int[] cows = new int[ncows];
        for (int j = 0; j < ncows; ++j) {
          cows[j] = Integer.parseInt(in.readLine());
        }
        Arrays.sort(cows);
        int low = 0;
        int high = ncows - 1;
        int max = (cows[high] + cows[low]) / (c - 1);
        if (c == 2) {
          max = cows[high] - cows[low];
          out.write((max + "\n").getBytes());
          continue;
        }
        int found = Integer.MAX_VALUE;
        for (int k = 0; k < ncows; ++k) {
          if (Math.abs(cows[k] - max) < Math.abs(found - max)) {
            found = cows[k];
            if (found == max) {
              break;
            }
          }
        }
        if (found > cows[low]) {
          max = Math.min(found - cows[low], Math.abs(found - cows[high]));
        } else {
          max = found;
        }
        out.write((max + "\n").getBytes());
      }
      out.flush();
    }  catch (IOException e) {
      return;
    }
  }
}
0

Gdzieś jest jednak błąd

0

Pierwszy błąd który popełniłeś to napisałeś kod dla maszyny a nie dla człowieka. Tego co tu wstawiłeś nie da się czytać. Mam dla ciebie ćwiczenie: pokaż ten kod młodszej siostrze albo mamie i spytaj czy rozumieją co ten kod robi. Następnie popraw ten kod i powtarzaj to do skutku aż siostra/mama będą wiedzieć co ten kod ma robić.

0

Spoko, ten kod nie ma być dla człowieka (pisane w 15 minut żeby rozwiązać zadanie), ale fakt - może ciężko się czytać. Tak czy siak będę musiał poprawić bo coś nie działa :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1