POJ 3045 Cow Acrobats
传送门:http://poj.org/problem?id=3104
题意:
烘干所有的衣服,在自然晾干每分钟可以减少1单位的水分,在烘干机里面每分钟减少k单位的水分,
一件衣服可以烘干一部分水分,也可以自然晒干一部分水分。
解题思路:
在代码中。
实现代码:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int MAXN=100000; const int INF=1<<25; int a[MAXN]; int N,M,K; /* C(mid):烘干所有的衣服所用的时间为mid。 false: 代表不能在mid时间烘干所有的衣服 true:代表在mid时间能烘干所有的衣服 */ /* 设烘干所有的衣服需要用的时间是x,那么自然晾干的时间为mid-x 那么k×x+mid-x>=a[i] 那么x>=(a[i]-mid)/(k-1) */ //限制条件是用烘干机的时间t<=mid bool calc(int mid){ //注意这儿越界 long long t=0; //计算烘干所有的衣服所用烘干机的时间 for(int i=0;i<N;i++){ if(a[i]-mid>0){ t+=(a[i]-mid+K-2)/(K-1); } } return t<=mid; } int main(){ cin>>N; int Max=-INF; for(int i=0;i<N;i++){ scanf("%d",&a[i]); Max=max(Max,a[i]); } cin>>K; if(K==1){ cout<<Max<<endl; return 0; } int L=0,R=Max; while(R-L>1){ int mid=(L+R)>>1; if(calc(mid)){ R=mid; }else{ L=mid; } } cout<<R<<endl; return 0; }
自己选的路,跪着也要把它走完------ACM坑