[语言月赛202306] 信 题解
Source & Knowledge
2023 年 6 月语言月赛,由洛谷网校入门计划/基础计划提供。
题目大意
zyl 按顺序拆开若干封信,信由信纸,信封和礼物三部分组成,给定了信纸与信封的单位质量,信纸与信封的面积,按照给定规则求出惊喜值,并给出过程中的最大值和最终的惊喜值。
题目分析
本题考察题目理解和代码实现能力。
本题题面还是不短的,需要认真读题以免丢失细节。我们来依次处理需要的信息。
首先判断有无礼物。显然,对于每一封信,礼物的重量等于总重量减去信封信纸的总重量。对于信封信纸,它们各自的重量等于单位面积的重量乘上它们的面积。故礼物的重量
接下来要处理连续有/无礼物的信封的数量。这里我们可以开两个变量
接下来就是计算惊喜值了。如果没有礼物时,按照题意,只需判断
注意惊喜值可能会达到
核心代码如下:
for(int i=1;i<=n;i++){
scanf("%d%d%d",&S,&s,&M);
int m = M - S * x + s * y;
if(m){
cnta++,cntb = 0;
now += m;
if(m > S * x - s * y)now += (m + 1) / 2;
if(cnta >= a)now *= 2;
ans = max(ans,now);
}
else {
cntb++,cnta = 0;
if(cntb >= b)now /= 2;
}
}
cout <<ans<<" "<<now;