题目链接:http://codeforces.com/problemset/problem/645/C
题意:n个房间,0表示空房间,1表示住了人。一个农夫带着k头牛来入住,牛也是要一头一间 = = 问下农夫离最远的牛最近的距离是多少
被自己误导了, 答案并不是在最短的k+1个房间的情况下求的

1 #include <algorithm> 2 #include <iostream> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cstdio> 6 #include <vector> 7 #include <cmath> 8 #include <queue> 9 #include <set> 10 #include <map> 11 #define INF 0x3f3f3f3f 12 using namespace std; 13 typedef long long LL; 14 15 char s[100010]; 16 int main() 17 { 18 int n, k, i, j; 19 scanf("%d %d", &n, &k); 20 scanf("%s", (s + 1)); 21 int l, num = 0, len, ll, rr, len2; 22 for(i = 1; i <= n; i++) 23 if(s[i] == '0'){ 24 l = i; 25 num = 1; 26 break; 27 } 28 int res = INF; 29 for(j = i + 1; j <= n; j++) 30 { 31 if(s[j] == '0') 32 { 33 num++; 34 if(num == k + 1) 35 { 36 num--; 37 int mid = (l + j) / 2; 38 while(s[mid] != '0') mid++; 39 rr = mid; 40 mid = (l + j) / 2; 41 while(s[mid] != '0') mid--; 42 ll = mid; 43 len = max(ll - l, j - ll); 44 len2 = max(rr - l, j - rr); 45 len = min(len, len2); 46 res = min(len, res); 47 for(int l1 = l + 1; l1 <= n; l1++) 48 if(s[l1] == '0'){ 49 l = l1; 50 break; 51 } 52 } 53 } 54 } 55 printf("%d ", res); 56 return 0; 57 }