今天我们来讲一讲科丁乐编程LV4第一单元考试题目。
先把题目发出来:
- K10176 接水问题 (35分)
题目描述
学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为 1。
现在有 n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从 1到 n 编号,i 号同学的接水量为 wi。接水开始时,1 到 m 号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学 j 完成其接水量要求 wj后,下一名排队等候接水的同学 k马上接替 j 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即j 同学第 x 秒结束时完成接水,则 k 同学第 x+1 秒立刻开始接水。若当前接水人数 n’不足 m,则只有 n’个龙头供水,其它 m−n’个龙头关闭。
现在给出 n 名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒。
输入格式
第 1 行 2 个整数 n 和 m,用一个空格隔开,分别表示接水人数和龙头个数。
第 2 行 n 个整数 w1、w2、……、wn,每两个整数之间用一个空格隔开,wi表示 i 号同学的接水量。
输出格式
输出只有一行,1 个整数,表示接水所需的总时间。
输入输出样列
输入样例1:
5 3
4 4 1 2 1
输出样例1:
4
输入样例2:
8 4
23 71 87 32 70 93 80 76
输出样例2:
163
说明
【输入输出样例 1 说明】
第 1 秒,3 人接水。第 1 秒结束时,1、2、3 号同学每人的已接水量为 1,3 号同学接完水,4 号同学接替 3 号同学开始接水。
第 2 秒,3 人接水。第 2 秒结束时,1、2 号同学每人的已接水量为 2,4 号同学的已接水量为 1。
第 3 秒,3 人接水。第 3 秒结束时,1、2 号同学每人的已接水量为 3,4 号同学的已接水量为 2。4 号同学接完水,5 号同学接替 4 号同学开始接水。
第 4 秒,3 人接水。第 4 秒结束时,1、2 号同学每人的已接水量为 4,5 号同学的已接水量为 1。1、2、5 号同学接完水,即所有人完成接水。总接水时间为 4 秒。
【数据规模与范围】
1≤n≤10000,1≤m≤100 且 m≤n;
1≤wi≤100。
【耗时限制】1000ms 【内存限制】128MB
- K12454 修建广场 (30分)
题目描述
科丁路是一条长度为N的笔直道路,可以将科丁路看成一个数轴,路的一端在数轴0的位置,另一端在N的位置。路边有M家住户,第i个住户会在数轴上点si 到点ti之间的每个整数点上种di颗树,包括点si和ti,即在si ,si+1,si+2…,ti 的位置上各种上di颗树。
科丁市政府决定在科丁路上修建一条长为L的广场给科丁市的市民们跳广场舞。为了修建广场,需要铲除科丁路上长度为L的一段路上的所有的树,广场的起点和终点都必须在数轴的整点上。为了保护环境,科丁市政府希望尽量减少铲除的树木的数量。于是科丁市政府找到你,希望你能帮助他们计算最少需要铲除多少棵树。
输入格式
输入文件:plaza.in
第1行:3个空格分隔的整数N,M和L。
接下来M行,每行3个空格分隔的整数:si,ti和di ,表示第i个住户会在si到ti的区域中的每个整数点上种植di棵树。
输出格式
输出文件:plaza.out
输出1行,一个正数,表示最少铲除的树的数量。
输入输出样列
输入样例1:
5 2 3
0 5 2
3 5 2
输出样例1:
10
说明
【样例说明】
样例1中:数轴长度为5, 拥有2个住户,广场的长度为3
住户1在数轴0、1、2、3、4、5上各种了2棵树
住户2在数轴3、4、5上各种了2棵树。
铲除区域0到3上的树,可以使得铲除的树的数量最小,其中位置0到位置2上各有2棵树,位置3上有4棵树,共铲除3*2+4 = 10棵树。、
【数据范围】
对于100%的数据,1≤L≤N≤1000,1≤M≤100,0≤si≤ti≤N,1≤di≤100
【耗时限制】1000ms 【内存限制】128MB
- K12555 国王的金币 (25分)
题目描述
恰逢科丁国国庆,国王非常高兴,准备给n为功臣分发金币。首先他让每个功臣都在自己的左手和右手上分别写下一个整数,然后国王也在自己的左手和右手上各写了一个整数。然后让这n为功臣站成一排,国王站在队伍的最前面,所有的功臣都会获得国王奖赏的若干金币,每位功臣获得的金币数分别是:这位功臣自己左手上的数字加上自己右手上的数字再加上国王左手上的数字,如果得到的数字比国王右手上的数字大那么就再减去国王右手上的数字,否则就不减。
最后请你帮忙计算一下,获得金币最多的功臣所获得的金币是多少。
输入格式
第一行,一个整数n,表示功臣的人数。n≤100
第二行,两个不超过100位的大整数,分别表示国王左手和右手上的数字
接下来n行,每行是两个不超过100位的大整数,分别表示第i位功臣左手和右手上的数字
输出格式
一行,输出获得金币最多的功臣所获得的金币数量
输入输出样列
输入样例1:
4
11111111111111111111 44444444444444444444
11111111111111111111 55555555555555555555
11111111111111111111 44444444444444444444
22222222222222222222 44444444444444444444
44444444444444444444 44444444444444444444
输出样例1:
55555555555555555555
输入样例2:
4
11111111111111111111 44444444444444444444
11111111111111111111 44444444444444444444
22222222222222222222 22222222222222222222
22222222222222222222 33333333333333333333
11111111111111111111 11111111111111111111
输出样例2:
33333333333333333333
【耗时限制】1000ms 【内存限制】128MB
- K12558 香蕉采摘 (10分)
题目描述
小科有一只宠物猴,名叫小圣。这天,他们正沿着乡间小路散步,突然发现了一片香蕉林,小科和小圣都非常的高兴,因为他们最爱香蕉。香蕉树整齐的排列着,形成了一个R行C列的网格,网格的每个格子里面有一棵香蕉树,小科一眼就能看出每棵树上有多少个香蕉,为了训练小圣的数学,小科吩咐小圣去采摘香蕉并要求它:
你从第一行第一列出发,也是就是(1,1)的位置开始,每次往上下左右四个方向去找相邻的一棵树,这个树要是没有被采摘过的而且这棵树上的香蕉要是这四个方向中数量最多的(保证每次只能找到唯一一棵这样的树),然后进行采摘。按照这样的方法,最终小圣总是会在(R,C)处停止然后采摘掉那里的香蕉。
现在给定网格的大小,以及每个格子里香蕉的数量,请你计算一下最终小圣一共采摘了多少香蕉。
输入格式
第一行 两个整数R C,分别表示香蕉林网格的总行数和总列数,1≤R≤40,1≤C≤40
接下来R行,每行C个整数,分别表示网络中每个格子里的一棵香蕉树上香蕉的个数,每棵香蕉树上香蕉的个数是1到100之间的整数
输出格式
一个整数,表示猴子小圣按照小科吩咐的移动方法最终到达(R,C)处一共采摘的香蕉的总数
输入输出样列
输入样例1:
3 4
3 3 4 5
4 5 3 2
1 7 4 2
输出样例1:
39
【耗时限制】1000ms 【内存限制】128MB
除了第一题我做过,是对的,其他全是错的
第一题:
先将我的代码发上来看一看:
#include<bits/stdc++.h>
using namespace std;
int now,n,m,o,w[10001];
int main(){
cin>>n>>m;
now=m+1;
for(int i=1;i<=n;i++){
cin>>w[i];
w[0]+=w[i];
}
for(;w[0]!=0;o++){
for(int i=1;i<=m;i++){
if(w[i]>0) w[i]--,w[0]--;
if(w[i]==0){
w[i]=w[now];
w[now]=0;
if(now!=n) now++;
}
}
}
cout<<o;
}
没有任何问题!
第二题:
错误代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,l;
int s[1001],t[1001],d[1001];
int r[1001];
int Min=2147483647,sum;
int main(){
cin>>n>>m>>l;
for(int i=1;i<=m;i++){
cin>>s[i]>>t[i]>>d[i];
for(int j=i;j<=m;j++) r[j]+=d[i];
}
for(int i=1;i<=n;i++){
for