竞赛总览
CSDN 编程竞赛六十六期:比赛详情 (csdn.net)
竞赛题解
题目1、路灯亮度
有一条长度为n米的街道,上面分布着一些亮度不等的路灯。每离开某盏路灯1米,该位置受该盏路灯影响的亮度就比该盏路灯的原始亮度减少一个单位。某个特定位置的最终亮度,等于所有影响该位置的路灯亮度的最大值。亮度的最小值为零。
cpp
#include <cstdio>
struct node {
long long int p;
long long int l;
};
int main () {
int n, m;
scanf ("%d %d", &n, &m);
node light [m];
for (int i = 0; i < m; i++) scanf ("%lld %lld", &light [i].p, &light [i].l);
long long int result, p, d;
while (scanf ("%lld", &p) != EOF) {
result = 0;
for (int i = 0; i < m; i++) {
d = abs (p - light [i].p);
if (light [i].l >= d) {
result = max (result, light [i].l - d);
}
}
printf ("%lld\n", result);
}
return 0;
}
刚开始直接计算出所有位置亮度,再回答输入数据中针对某个特定位置的问题,自测没问题,但通过0%的测试数据。之后改为针对某个特定位置直接计算亮度,通过100%的测试数据。
题目2、池塘水量
某地有n个池塘,编号为 i 的池塘最大容积为 i(从1开始编号)。池塘一开始都没有水,每天的天气状况决定了所有水池同时的水量变化。如果某天下了体积为 v 的雨,所有池塘都会增加体积为 v 的水。池塘满了的话,水就会溢出而流走,不会影响到以后的水量。如果某天天气炎热而蒸发了体积为 v 的水,所有池塘都会减少体积为 v 的水。池塘最多把所有水蒸发干,变成无水状态,不会影响到以后的水量。
cpp
include <cstdio>
int data [800000];
int main () {
int result = 0;
int n, m;
scanf ("%d %d", &n, &m);
while (m --> 0) {
int v;
scanf ("%d", &v);
if (v > 0) {
result = 0;
for (int i = 1; i <= n; i++) {
result = result + (data [i] = min (data [i] + v, i));
}
} else if (v < 0) {
result = 0;
for (int i = 1; i <= n; i++) {
result = result + (data [i] = max (data [i] + v, 0));
}
}
printf ("%d\n", result);
}
return 0;
}
直接暴力计算,通过70%测试点。如果将整数换为长整数,可以再通过1个测试点。