结论是:按位置排序好以后,对于真正的答案,走法应该是:依次走向第0个等分点,第1个等分点……这样对于这种等分情况,是最优的调度。
1 /* 2 先假设一个终点位置然后按位站好 3 这个位置不一定是最优所以要调 4 调的话其实是大家共进退,所以最后要求最大值和最小值的绝对值的差要<=1 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 9 int main() { 10 int T; 11 scanf("%d", &T); 12 13 for (int kase = 1; kase <= T; kase++) { 14 15 int n, m, a[20005]; 16 scanf("%d %d", &n, &m); 17 for (int i = 0; i < m; i++) 18 scanf("%d", &a[i]); 19 20 std::sort(a, a + m); 21 22 int maxx = -1e9 + 5, minn = 1e9 + 5; 23 for (int i = 0; i < m; i++) { 24 a[i] -= i * (n / m); 25 maxx = std::max(maxx, a[i]); 26 minn = std::min(minn, a[i]); 27 } 28 29 printf("Case #%d: %d ", kase, (maxx - minn + 1) >> 1); 30 } 31 32 return 0; 33 }