題目大意:就是有n件剛洗了的衣服,然後每件衣服有a[i]的水,自然風乾可以一分鐘少1個水量,用暖氣烘乾一分鐘可以少k個水量,現在問使所有的衣服都晾乾最少要用多長的時間。
思路:首先說這個,使最小值,所以右區間是可行解,左區間是不可行解。然後判斷條件:判斷x嘛,如果衣服的水量小於等於x,那麼就可以自然風乾了,如果衣服的水量大於x,那就不能自然風乾。現在我們假設這個衣服上的水量大於x的衣服最少需要nuan的時間在暖氣上烘乾,然後需要自然風乾的水量就是x-nuan;自然風乾後剩下的水是:a[i]-(x-nuan),這些水需要暖氣烘乾,也就是nuan*k;
也就是有下面的式子:
a[i]-(x-nuan)=nuan*k
可以得到:
nuan=(a[i]-x)/(k-1)
這個式子取等的話就是每件水量大於x的衣服需要在暖氣上烘乾的時間,但是我們不可能用小數,所以我們要向上取整,所以這些時間加起來如果小於等於x就是可行的。
這裡額外說一下就是,其實這個方法我理解了很久,我不知道為什麼要做這樣的假設,後來我想明白了,因為水量大於x的衣服自然風乾沒辦法完全晾乾,所以我們要借助暖氣烘乾,但是這個過程不是所有的水量都放在暖氣上烘乾的,可能還會有自然晾乾的一部分,所以我們這裡算的暖氣上烘乾的時間實際上是它最少要在暖氣上烘乾多久,只要這些兩種時間加起來小於等於x就可以,因為可能不止有一件水量大於x的衣服,所以這兒要理解一下吧,也可能只有我才會糾結這種東西,因為我看別人的部落格的時候都沒有看到多少分析什麼的,人家大佬都能明白吧,我不能理解,所以我這道題已經做了兩天了……
#include#include#define inf 100005
long long a[inf];
long long n,k;
bool judge(long long x)
}return sum>x;
}int main()
printf("%lld\n",min_);}}
return 0;
}
下面這種也是可以的:
else
printf("%lld\n",max_);
}
下面這種就是我換了這種方法之後一直一直一直一直t的寫法,我真的是fo,為什麼會t,真的很無語好不好,然後後來我就很納悶,我就直接貼了其他人部落格上的**上去,a了……我就更無語了,明明思路是一樣的,怎麼會t。然後我就又認真看了一下,然後發現題目上不是有
sample input #1
32 3 9
5sample input #2
32 3 6
5
sample output #1
3sample output #2
2
下邊這個就是我開始寫的,然後就一直t的那個……,我是記住了………………
#include#include#define inf 100005
typedef long long ll;
const char str[100]= ;
ll a[inf];
ll n,k;
ll max_,min_,mid;
ll judge(ll x)
}return sum>x;
}int main()
printf("%s%lld\n%lld\n",str,d,min_);}}
return 0;
}
其實我開始不是這麼做的,我開始就是特別特別特別最最最常規的方法,二分加貪心嘛,先從衣服水量最大的開始烘乾,一分鐘過後,烘乾的衣服水量-k,自然風乾的就-1,然後再找水量最大的衣服,一直迴圈到所有的衣服水量都為0。然後就超時了……
#include#include#define inf 100005
const char str[100]= ;
int a[inf];
int n,k;
int tsum;
int max_,min_,mid;
int max(int arr,int num)
}return ans;
}int fun(int x)
tsum++;
}return tsum>x;//這是不可行的
}int main()
printf("%s%d\n%d\n",str,d,min_);
}return 0;
}
你都無法想象我已經瘋狂到什麼程度,開始不是沒用上面說的那種方法,然後就盡量改了能減少運算的就減少運算,我甚至後來改了指標,但是由於不怎麼會用所以一直報錯,我就放棄了,反正就是各種懷疑,然後還是各種t…………醉了
尤其是我後來改我那個開始a,後來wa的那個的時候,已經到達瘋狂了,我懷疑是不是不能用typedef long long ll;是不是前邊if都已經continue了,後邊還是要加else;是不是不能把max_,min_,mid放全域性……反正就是各種改,後來改的和我a了的那份所有格式是一樣的,就連縮排都是一樣的,它還是wa了,然後我就是真的fo了,最後知道是少了個%,我就更fo了,天那,真可怕……嗚嗚嗚,我好弱哦……今天上午又只弄這個了………………
POJ 3104 Drying 二分 貪心
題目大意 有n件溼的衣服,每件衣服都有相應的濕度,每分鐘每件衣服的濕度減1 除了在烘乾機裡的衣服 現在有乙個烘乾機,烘乾機一分鐘可以讓一件衣服的濕度降低k,問至少要花多少分鐘才能使每件衣服的濕度為0 解題思路 貪心的話,每分鐘都要使用到烘乾機。列舉時間,如果濕度小於等於時間的話,就不用考慮了,在列舉...
POJ3104 Drying(二分答案)
題目大意 有n件衣服,每件衣服含a滴水 有一台每分鐘可以烘乾k滴水的機器,每次可以讓一件衣服使用 衣服每分鐘蒸發一滴水,輸出烘乾所有的衣服的最少時間 二分列舉最少時間mid 遍歷衣服,若某件衣服含水量大於mid 算出烘乾所用總時間,公式為 a i mid k 1 再判斷時間與mid的大小 注意k 1...
POj 3104 Drying 二分 貪心
題目大意 有n件溼的衣服,每件衣服都有相應的濕度,每分鐘每件衣服的濕度減1 除了在烘乾機裡的衣服 現在有乙個烘乾機,烘乾機一分鐘可以讓一件衣服的濕度降低k,問至少要花多少分鐘才能使每件衣服的濕度為0 解題思路 貪心的話,每分鐘都要使用到烘乾機。列舉時間,如果濕度小於等於時間的話,就不用考慮了,在列舉...