POJ3104 Drying
2013-04-11 01:03
211 查看
题目链接:http://poj.org/problem?id=3104
这道题是我做的第一道二分枚举答案的题吧,可是实际上做的也不怎么样……
首先二分枚举答案,也就是最短时间,如果a[i]<t的话直接让它自然风干就行,如果大于t就计算使用几次风干器,假设x1是自然风干时间,x2是使用风干器的次数,那么x1+x2=t,x1+x2*k=a[i],两个方程联立,求出来使用的次数应该是(a[i]-t)/(k-1)的上界,所以把所有的使用散热器和自然风干的时间加到一起,和枚举的答案比较,然后继续二分就行。
#include <cstdio>
#include <cmath>
int maxt, t, a[100100], k, n;
bool check(int tt){
double rt = 0;
for (int i = 0; i < n; i++)
if (a[i] > tt) rt += ceil(double(a[i] - tt) / double(k - 1));
if (rt <= tt) return 1;
else return 0;
}
void solve(){
int l = 0, r = maxt;
while (l <= r){
int m = (l + r) >> 1;
if (check(m)){
if (!check(m - 1)){
t = m; return;
}
r = m - 1;
}
else l = m + 1;
}
}
int main(){
while (~scanf("%d", &n)){
maxt = 0;
for (int i = 0; i < n; i++){
scanf("%d", &a[i]);
if (a[i] > maxt) maxt = a[i];
}
scanf("%d", &k);
solve();
printf("%d\n", t);
}
return 0;
}
这道题是我做的第一道二分枚举答案的题吧,可是实际上做的也不怎么样……
首先二分枚举答案,也就是最短时间,如果a[i]<t的话直接让它自然风干就行,如果大于t就计算使用几次风干器,假设x1是自然风干时间,x2是使用风干器的次数,那么x1+x2=t,x1+x2*k=a[i],两个方程联立,求出来使用的次数应该是(a[i]-t)/(k-1)的上界,所以把所有的使用散热器和自然风干的时间加到一起,和枚举的答案比较,然后继续二分就行。
#include <cstdio>
#include <cmath>
int maxt, t, a[100100], k, n;
bool check(int tt){
double rt = 0;
for (int i = 0; i < n; i++)
if (a[i] > tt) rt += ceil(double(a[i] - tt) / double(k - 1));
if (rt <= tt) return 1;
else return 0;
}
void solve(){
int l = 0, r = maxt;
while (l <= r){
int m = (l + r) >> 1;
if (check(m)){
if (!check(m - 1)){
t = m; return;
}
r = m - 1;
}
else l = m + 1;
}
}
int main(){
while (~scanf("%d", &n)){
maxt = 0;
for (int i = 0; i < n; i++){
scanf("%d", &a[i]);
if (a[i] > maxt) maxt = a[i];
}
scanf("%d", &k);
solve();
printf("%d\n", t);
}
return 0;
}
相关文章推荐
- POJ3104--Drying
- POJ3104 Drying
- POJ3104(Drying,最小化,可行解)
- POJ3104_DRYING_二分
- poj3104 Drying
- POJ3104-Drying
- POJ3104 Drying (二分的力量2)
- POJ3104_Drying_二分
- POJ3104-Drying
- POJ3104 Drying(二分答案)
- POJ3104 Drying [二分]
- POJ3104 Drying 二分搜索
- POJ3104 Drying
- poj3104 drying( 二分,最小化最大值)
- [二分]poj3104 Drying
- POJ3104 Drying [二分]
- POJ3104:Drying(二分)
- poj3104 Drying(二分)
- CSU-ACM2017暑假集训2-二分搜索 poj3104-drying
- POj3104 Drying(二分)