【SPOJ-AGGRCOW】【BZOJ1734】【POJ2456】Aggressive cows【二分】【贪心】
2016-02-25 14:42
477 查看
题意:
n个房间,c头牛,将这c头牛分配进房间,使得牛之间的最小距离最大。
经典二分。
二分答案,枚举房间。
如果房间距离大于答案,那么计数器加一。
如果最后计数器不小于c,说明答案应该更大,否则更小。
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 100005;
int n, m, pos[maxn];
inline int iread() {
int f = 1, x = 0; char ch = getchar();
for(; ch < '0' || ch > '9'; ch = getchar()) f = ch == '-' ? -1 : 1;
for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
return f * x;
}
inline bool check(int x) {
int cnt = 1, st = pos[1];
for(int i = 2; i <= n; i++) if(pos[i] - st >= x) {
cnt++;
st = pos[i];
if(cnt >= m) return 1;
}
return 0;
}
int main() {
int T = iread();
while(T--) {
n = iread(); m = iread();
for(int i = 1; i <= n; i++) pos[i] = iread();
sort(pos + 1, pos + 1 + n);
int l = 0, r = pos
- pos[1];
while(l <= r) {
int mid = l + r >> 1;
if(check(mid)) l = mid + 1;
else r = mid - 1;
}
printf("%d\n", r);
}
return 0;
}
n个房间,c头牛,将这c头牛分配进房间,使得牛之间的最小距离最大。
经典二分。
二分答案,枚举房间。
如果房间距离大于答案,那么计数器加一。
如果最后计数器不小于c,说明答案应该更大,否则更小。
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 100005;
int n, m, pos[maxn];
inline int iread() {
int f = 1, x = 0; char ch = getchar();
for(; ch < '0' || ch > '9'; ch = getchar()) f = ch == '-' ? -1 : 1;
for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
return f * x;
}
inline bool check(int x) {
int cnt = 1, st = pos[1];
for(int i = 2; i <= n; i++) if(pos[i] - st >= x) {
cnt++;
st = pos[i];
if(cnt >= m) return 1;
}
return 0;
}
int main() {
int T = iread();
while(T--) {
n = iread(); m = iread();
for(int i = 1; i <= n; i++) pos[i] = iread();
sort(pos + 1, pos + 1 + n);
int l = 0, r = pos
- pos[1];
while(l <= r) {
int mid = l + r >> 1;
if(check(mid)) l = mid + 1;
else r = mid - 1;
}
printf("%d\n", r);
}
return 0;
}
相关文章推荐
- 快速排序里的学问:从猜数字开始
- 1.一些 贪心算法 的简单思维题:
- 贪心算法——字典序最小问题
- 贪心算法——区间调度问题
- HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )
- Jump Game I,II 贪心
- Search Insert Position,Search for a Range,Pow(x, n),Sqrt(x)
- Find Minimum in Rotated Sorted Array II
- Wildcard Matching
- 贪心法实现无向图的划分 代码
- 贪心题目循环和控制台折行
- HDOJ 1009
- [LeetCode] Sqrt(x)
- [LeetCode] Pow(x, n)
- [LeetCode] Search Insert Position
- [LeetCode] Search for a Range
- [LeetCode] Search in Rotated Sorted Array
- 【解题报告】【USACO】酸奶工厂
- 【解题报告】【】交谊舞
- POJ 1328