前言

D老师真是和我们一样闲着没事干。


先上张大表:

题目 等级
A 语法基础
B
C CSP-J
D
E CSP-S
F
G

好像没啥用。

A.台风监测系统1

直接枚举就好了,或者有什么特殊的公式。反正只有 11 ~ 99

枚举每一个 i(1i9)i(1≤i≤9) ,判断 ii+i\overline{ii} + i 是否等于 nn

伪代码:

input(n)
for i in (1, 9):
	if i * 10 + i + i == n:
		print(i)
		end
print(404) 

B.D老师的网课点名

根据题意,很容易看出这是递归(没学的赶紧去补课吧,这里不讲了。补课×1补课\times1)。

所有递归就两个内容:

  1. 边界;
  2. 递归式。

比递推少了两步!

  • 把上一位同学传过来的数字加上自己的编号,得到数值 NN
  • 如果这个时候数字 NN 的个位是 33 ,那么就结束互动。否则假设当前同学的编号为 tt ,则按下面的规则传递给下一位小朋友:
    • 如果 tt 是奇数,那么传递给编号为 3t+13∗t+1 的小朋友。
    • 如果 tt 是偶数,那么传递给编号为 t2\frac{t}{2} 的小朋友。

就根据这些,很容易就能写出递归函数。

伪代码:

def dg(t, num):
	N = t + num
	if N % 10 == 3:
		end
	if t % 2 == 1:
		dg(3 * t + 1, N)
	else
		dg(t / 2, N)

C.台风监测系统2

既然数据这么小,直接枚举就好了。枚举每一个点的 xxyy ,再计算可以检测到多少个建筑物。

for x in (1, n):
	for y in (1, m):
		cnt = 0
		for {xi, yi} in 建筑物:
			if mhd(x, y, xi, yi) <= 2:
				cnt += 1
		ans = max(ans, cnt)
print(ans)

(差点就写成 python 了)

D.台风监测系统2.0beta版测试数列1

这个标题是跟道法老师学的。

直接模拟就好了。很容易想到 vector补课×2补课\times2)。要注意的是 vector 的下标是从 00 开始的。而题意是从 11 开始。有两种解决方案:

  1. 每个下标都减一;
  2. 在输入数组前 push_back 一个东西。

E.台风监测系统2.0beta版测试数列2

首先看数据范围: 1n,m1051≤n,m≤10^5 。就知道两重循环是不行的。

看到这种大段长度修改的就想到差分补课×3补课\times3)。但是这又不同于普通的差分,因为这题对奇数和偶数有不同的操作。

  • 如果 lil_irir_i 区间某个 aia_i 值是奇数,则 aia_i 值增加 11
  • 如果 lil_irir_i 区间某个 aia_i 值是偶数,则 aia_i 值保持不变。

仔细想想就会发现:奇数每次只加一,而加一之后又会变成偶数。所以每一个数字最多只会被操作一次。 所以可以定义一个数组存储数字是否被修改。后面再用前缀和复原,就可以做出来了。

额……然后后面我就不会了。

补课×114514补课\times114514