题解 | #[NOIP2010]接水问题#
[NOIP2010]接水问题
https://ac.nowcoder.com/acm/problem/16600
解决此题的关键在于如何算出接水的总时间。我们先用一个数组接收每个人需要打水的量,接下来用for语句控制一次所承载同时接水的人数m,通过遍历得出数组中前m个元素中最小的那个,并用x记录其索引。接下来再用一个for循环来进行同时减最小值,此最小值就代表时间的流逝,也代表此时需要换人接水,也就是p[x]=p[k],下一个人紧跟上来接水,依次遍历完后面的所有人。但需要注意的是,最后一个人的时候,并不是取最小值,而是取最大值,只有当时间最长的人完成了接水,整个接水任务才算完成,这样即可解决此题。
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int m=sc.nextInt(); int[] p=new int[n]; int[] w=new int[m]; for(int i=0;i<n;i++) { p[i]=sc.nextInt(); }
int x=0;
int time=0;
for(int k=m;k<n;k++) {
int min=100;
for(int i=0;i<m;i++) {
if(p[i]<min) {
min=p[i];
x=i;
}
}
for(int i=0;i<m;i++) {
p[i]=p[i]-min;
}
p[x]=p[k];
time=time+min;
}
int max=0;
for(int i=0;i<m;i++) {
if(p[i]>max) {
max=p[i];
}
}
System.out.println(time+max);
}
}