CSP CCF认证2023-03

目录

一些考试感受

202303-1 田地丈量

202303-2 垦田计划


一些考试感受

前段时间刚去参加了ccf考试,感受就是:ccf的题目比较扣细节,如果有一个细节没有照顾到,就不能全部AC。而且ccf考试是不能到看你哪里出错了的,你只能知道自己的第几条测试没有AC过。如果你觉得自己的思路是正确的,自己测试的结果也是正确的,建议再仔细读一遍题目,看看有哪些点是你漏看或者没有考虑到的。

202303-1 田地丈量

这道题我刚看的时候有点慌,我以为这道题选定区域的时候是有交集的。我当时没想出怎么计算重合的区域,就先假设不会重合,写了一份代码,没想到竟然AC了。是我把这道题想复杂了。以下是我的代码:

#田地丈量
for i in range(n):
    x1, y1, x2, y2 = map(int, input().split())
    if x1 >= a or y1 >= b or x2 <= 0 or y2 <= 0:
        continue
    if 0 <= x1 <= a:
        stx = x1
    elif x1 < 0:
        stx = 0
    if 0 <= y1 <= b:
        sty = y1
    elif y1 < 0:
        sty = 0
    if 0 < x2 <= a:
        enx = x2
    elif x2 > a:
        enx = a
    if 0 < y2 <= b:
        eny = y2
    elif y2 > b:
        eny = b
    sum_ += (enx-stx)*(eny-sty)
print(sum_)
        

202303-2 垦田计划

这道题如果通过暴力的方式,拿70分还是很简单的,但是后面的测试会超时。

如果想要拿100分,就要思考如何优化代码。以下是我考试的时候AC过的代码:

from collections import Counter

n, m, k = map(int, input().split())

blocks = Counter()
min_t = float('inf')
max_t = 0
for _ in range(n):
    t, c = map(int,input().split())
    if t < min_t:
        min_t = t
    if t > max_t:
        max_t = t
    blocks[t] += c
#print(blocks)

cost = 0
temp = 0
for i in range(max_t,k-1,-1):
    if m - cost < blocks[i]:
        print(i)
        break
    if i in blocks:
        temp += blocks[i]
    cost += (blocks[i] + temp)
else:
    print(k)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值