codeforce645C_尺取法

题目链接: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 }
View Code
原文地址:https://www.cnblogs.com/luomi/p/5708975.html