Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
注意在判断的过程中越界#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; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator