NOIP 2010 普及組 複賽 water 接水問題
1.一開始想的是隊列,但覺得比較複雜。
2.稍微想了想,接完水,馬上加上下一個接水的,也就是在最少耗時的水龍頭上加上下一位。找最小值
3.最終找到最長時間的水龍頭,即耗時。找最大值
//洛谷 P1190 接水問題
//難度:入門難度
//考點:輸入,輸出 ,找最大值,找最小值,函數的寫法
//适用:國小生
附上AC代碼,編譯環境Dev-C++4.9.9.2
#include <stdio.h>
int a[100+10];//水龍頭數
int b[10000+10];//人數
int findmax(int *a,int b,int e){
int i;
int max=0;
int k;
for(i=b;i<=e;i++)
if(max<a[i]){
max=a[i];
k=i;
}
return k;
}
int findmin(int *a,int b,int e){
int i;
int min=999999;
int k;
for(i=b;i<=e;i++)
if(min>a[i]){
min=a[i];
k=i;
}
return k;
}
int main(){
int i,j;
int n,m;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&b[i]);
if(n<=m){//水龍頭數多
j=findmax(b,1,n);
printf("%d\n",b[j]);
}else{//人數多
for(i=1;i<=m;i++)
a[i]=b[i];
for(i=m+1;i<=n;i++){//加入後續打水學生
j=findmin(a,1,m);
a[j]+=b[i];
}
j=findmax(a,1,m);
printf("%d\n",a[j]);
}
return 0;
}