CSDN竞赛第66期参赛感受

前几天在CSDN看到了第65期竞赛,本来想参加的,却因为时间原因没能参加,所以这次成了我第一次参加CSDN的竞赛。希望自己在学习(不只是算法)的道路上走得更远。

选择题 

本人是学竞赛的,碰上这种题直接抓瞎,然后瞎猫碰到死耗子蒙对了一道题,没看过书,也不会,就不说了。

非选择题

第一题

题目描述

有一条长度为n米的街道,上面分布着一些亮度不等的路灯。每离开某盏路灯1米,该位置受该盏路灯影响的亮度就比该盏 路灯的原始亮度减少1个单位,而某个特定位置的最终亮度则等于所有影响该位置的路灯亮度的最大值,而亮度的最小值 为0。

思路

这个题题目给了一个q,一直没搞清是什么,最后用的循环输入。

其实这个题写了个暴力,然后居然AC了。对于所有的查找的点,枚举所有路灯,找到所有路灯对其亮度最大值和0比较,然后输出。

代码
#include <iostream>
#include <cstring>
#define N 5005
#define INF 0x3f3f3f3f
using namespace std;

int n, m;
int p[N], h[N];

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= m; i ++)
    scanf("%d%d", &p[i], &h[i]);
    int temp;
    while (cin >> temp) {
        int ans = -INF;
            for (int j = 1; j <= m; j ++) {
                ans = max(ans, max(h[j] - abs(temp - p[j]), 0));
            }
        printf("%d\n", ans);
    }
    return 0;
}

第二题

题目描述

某地有n个池塘,编号为i的池塘最大容积为i(从1开始编号),一开始都没有水。每天的天气状况决定了所有水池同时的 水量变化,如果某天下了容积为v的雨表示所有池塘都会增加容积v的水,当然池塘满了的话水就会溢出而流走,不会影响 到次日以后。如果某天天气炎热而蒸发了容积为v的水表示所有池塘都会减少容积v的水,当然池塘最多把所有水蒸发干而 变成容积为0,也不会影响到次日以后。

思路

本人语言表达能力不是很好,简单说一下吧

因为这个池塘的最大容积是随i递增的,所以整个池塘的深度肯定是单调递增的,所以只需要维护一条直线就可以了,而且,每过一天最多产生一条斜线,还有可能消除之前的直线。废话不多说,附上代码

代码
#include <iostream>
#include <cstring>
#include <algorithm>
#define N 1000005
using namespace std;
int n, m;
int inde;
long long ans, x, h[N], w[N];
long long cal(long long h, long long w) {
return h * (h + 1) / 2 + (n - w) * h;
}
int main() {
cin >> n >> m;
for (int i = 1; i <= m; i ++) {
cin >> x;
if (x > 0) {
while (inde && h[inde] + x >= w[inde]) {
ans -= cal(h[inde], w[inde]);
x += h[inde--];
}
h[++inde] = min(x, 1ll * n);
w[inde] = min(x, 1ll * n);
ans += cal(h[inde], w[inde]);
} else {
while (inde && h[inde] + x <= 0) {
ans -= cal(h[inde], w[inde]);
x += h[inde--];
}
if (inde) {
ans -= cal(h[inde], w[inde]);
h[inde] += x;
ans += cal(h[inde], w[inde]);
}
}
printf("%lld\n", ans)
}
return 0;
}

结语

这次竞赛对于我来说是一个历练,更是一个挑战,希望我(当然包括大家)也都可以克服挑战,砥砺前行

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值