dengxinyi 6 jaren geleden
bovenliggende
commit
ace40ef17e
3 gewijzigde bestanden met toevoegingen van 72 en 0 verwijderingen
  1. 1 0
      .gitignore
  2. 40 0
      bailian/2456.aggressive-cows/Main.java
  3. 31 0
      bailian/2456.aggressive-cows/main.cc

+ 1 - 0
.gitignore

@@ -5,6 +5,7 @@ node_modules
 
 *.class
 
+*.txt
 *.exe
 *.bat
 

+ 40 - 0
bailian/2456.aggressive-cows/Main.java

@@ -0,0 +1,40 @@
+import java.io.BufferedInputStream;
+import java.util.Arrays;
+import java.util.Scanner;
+
+public class Main {
+    private static final int XMAX = (int) 1e9;
+
+    public static void main(String[] args) {
+        Scanner scanner = new Scanner(new BufferedInputStream(System.in));
+        int N = scanner.nextInt(), C = scanner.nextInt();
+        scanner.nextLine();
+        int[] stalls = new int[N];
+        for (int i = 0; i < N; i++) {
+            stalls[i] = Integer.parseInt(scanner.nextLine());
+        }
+        Arrays.sort(stalls);
+        int beg = 0, end = stalls[N - 1] - stalls[0];
+        while (1 < end - beg) {
+            int mid = beg + (end - beg) / 2;
+            if (isValid(stalls, N, C, mid)) {
+                beg = mid;
+            } else {
+                end = mid;
+            }
+        }
+        System.out.println(beg);
+        scanner.close();
+    }
+
+    private static boolean isValid(int[] stalls, int N, int C, int dist) {
+        int prev = -XMAX;
+        for (int stall : stalls) {
+            if (dist <= stall - prev) {
+                if (--C == 0) break;
+                prev = stall;
+            }
+        }
+        return C == 0;
+    }
+}

+ 31 - 0
bailian/2456.aggressive-cows/main.cc

@@ -0,0 +1,31 @@
+#include <algorithm>
+#include <cstdio>
+
+using namespace std;
+
+int n, c, a[100005];
+
+int search(int l, int r) {
+  while (1 < r - l) {
+    int mid = l + (r - l) / 2, x = a[1], k = 1;
+    for (int i = 2; i <= n; i++) {
+      if (mid <= a[i] - x) {
+        x = a[i];
+        if (c <= ++k) break;
+      }
+    }
+    if (c <= k)
+      l = mid;
+    else
+      r = mid;
+  }
+  return l;
+}
+
+int main() {
+  scanf("%d %d", &n, &c);
+  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
+  sort(a, a + n);
+  printf("%d\n", search(0, a[n] - a[1]));
+  return 0;
+}