POJ 3104(二分&三分_G题)解题报告
题目链接:http://poj.org/problem?id=3104
--------------------------------------------------------
题意:有n件衣服,含有a[i]的水分,每天可以自然风干1点,或者机器风干k点,求所需的最小天数。
思路:二分最小化值的题目,二分标准是第i件衣物含水值,判断标准是其余含水值和此件衣物含水值。
代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<vector> #include<stack> #include<bitset> #include<cstdlib> #include<cmath> #include<set> #include<list> #include<deque> #include<map> #include<queue> using namespace std; typedef long long ll; const double PI = acos(-1.0); const double eps = 1e-6; const int MAXN =1e5+10; long long int a[MAXN]; long long int k=0; int n=0; int jud(int mid){ long long int sum=0; for(int i=0;i<n;i++){ if(a[i]>mid) { sum+=(a[i]-mid+k-2)/(k-1); if(sum>mid) return 1; } } return 0; } int bsearch(){ int left=1; int right=a[n-1]; int mid; while(right>=left){ mid=(right-left)/2+left; if(jud(mid)){ left =mid+1; }else{ right=mid-1; } } return left; } int main(void){ while(~scanf("%d",&n)){ for(int i=0;i<n;i++){ scanf("%lld",&a[i]); } scanf("%lld",&k); sort(a,a+n); if(k==1){ printf("%lld\n",a[n-1]); }else{ printf("%d\n",bsearch()); } } return 0; }

浙公网安备 33010602011771号