迷瘴 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic PRoblem Description
通過懸崖的yifenfei,又面臨著幽谷的考驗—— 幽谷周圍瘴氣彌漫,靜的可怕,隱約可見地上堆滿了骷髏。由于此處長年不見天日,導致空氣中布滿了毒素,一旦吸入體內,便會全身潰爛而死。 幸好yifenfei早有防備,提前備好了解藥材料(各種濃度的萬能藥水)。現在只需按照配置成不同比例的濃度。 現已知yifenfei隨身攜帶有n種濃度的萬能藥水,體積V都相同,濃度則分別為Pi%。并且知道,針對當時幽谷的瘴氣情況,只需選擇部分或者全部的萬能藥水,然后配置出濃度不大于 W%的藥水即可解毒。 現在的問題是:如何配置此藥,能得到最大體積的當前可用的解藥呢? 特別說明:由于幽谷內設備的限制,只允許把一種已有的藥全部混入另一種之中(即:不能出現對一種藥只取它的一部分這樣的操作)。 提示:多種藥水混合后的濃度=(濃度1*體積1+濃度2*體積2+……)/(體積和)
Input
輸入數據的第一行是一個整數C,表示測試數據的組數; 每組測試數據包含2行,首先一行給出三個正整數n,V,W(1<=n,V,W<=100); 接著一行是n個整數,表示n種藥水的濃度Pi%(1<=Pi<=100)。 Output
對于每組測試數據,請輸出一個整數和一個浮點數; 其中整數表示解藥的最大體積,浮點數表示解藥的濃度(四舍五入保留2位小數); 如果不能配出滿足要求的的解藥,則請輸出0 0.00。 Example Input
3 1 100 10 100 2 100 24 20 30 3 100 24 20 20 30 Example Output
0 0.00 100 0.20 300 0.23
#include <stdio.h>#include <stdlib.h>int main(){ int i,j,k; int c,n,v,w; int p[101]; scanf("%d",&c); while(c--){ double sump = 0; scanf("%d %d %d",&n,&v,&w); for(i=0; i<n; i++) scanf("%d",&p[i]); for(i=0; i<n-1; i++){//從小到大拍個序,哪天我也要用qsort快排函數 哼~ for(j=0; j<n-i-1; j++){ if(p[j]>p[j+1]){ k = p[j]; p[j] = p[j+1]; p[j+1] = k; } } } if(p[0]>w)//當最小的濃度比w還大,那肯定配不出來了 printf("0 0.00/n"); else{ for(i=0; i<n; i++){//這個是數學函數,把v約掉 if((sump+p[i])/(i+1)<=w) sump += p[i];//sump用來存儲之前的已經加進去濃度的和 else break; } sump /= i; printf("%d %.2lf/n",v*i,sump/100); } } return 0;}這個題確實不算難,不過自己做這題卻花了好多時間,想想真是羞死了 (還有人說這題水的不能再水了~ヾ(?`Д′?)
新聞熱點
疑難解答