2021南京市小学生信息夏令营活动题解
Problem 1
题面概述
给出 1 1 1~ n n n的一个排列 a a a,问该数列是否满足对于所有 i , j i,j i,j满足 1 < i , j ≤ n 1< i,j \leq n 1<i,j≤n且 i i i不等于 j j j,满足 ∣ a [ i ] − a [ i − 1 ] ∣ |a[i]-a[i-1]| ∣a[i]−a[i−1]∣不等于$|a[j]-a[j-1]|。
思路
考虑把所有 ∣ a [ i ] − a [ i − 1 ] ∣ |a[i]-a[i-1]| ∣a[i]−a[i−1]∣对应 b b b数组中的数值加一,若 b b b数组中有大于一的数,则条件不成立,否则成立。复杂度 O ( n ) O(n) O(n)。
Problem 2
题面概述
给出RGB矩阵 c c c,每一个R会把一轮后的G染成R,每一个G会把一轮后的B染成G,每一个B会把一轮后的R染成B。求一轮后的矩阵
思路
考虑暴力枚举。
枚举每一条两个点之间的边。
将所有互不相同的进行下一轮染色。
暴力即可。复杂度
O
(
n
2
)
O(n^2)
O(n2)。
Problem 3
题面概述
给出 n n n,求满足条件 n n n% i = 0 i=0 i=0的 i i i有几个。
思路
枚举
i
<
n
i< \sqrt n
i<n。
若
n
n
n%
i
=
0
i=0
i=0,记两个
i
i
i。
最后枚举
i
=
n
i= \sqrt n
i=n。
若
n
n
n%
i
=
0
i=0
i=0,记一个
i
i
i。
输出最终结果即可,复杂度
O
(
n
)
O(\sqrt n)
O(n)。
Problem 4
题面概述
给出数组 a a a,求最长的每项满足大于两边或小于两边的 a a a的子序列。
思路
贪心,选入首尾两头和其他峰值,谷值,输出总数量即可。
复杂度
O
(
n
)
O(n)
O(n)。
Problem 5
题面概述
构造一个数组,满足:
1.
∑
i
=
1
m
a
[
i
]
=
n
\sum _{i=1}^{m} a[i]=n
∑i=1ma[i]=n
2.
a
[
i
−
1
]
<
a
[
i
]
a[i-1]<a[i]
a[i−1]<a[i]
3.
m
>
1
m>1
m>1
问有多少个满足要求的数组。
思路
搜索。
通过dfs与记搜枚举从左到右每一位的数值。
复杂度
O
(
n
2
)
O(n^2)
O(n2)
Problem 6
题面概述
现在有一个数 x x x,每一次操作可以变成 x + 1 x+1 x+1或 x − 1 x-1 x−1或 x ∗ 2 x*2 x∗2。问至少几次变成 y y y。
思路
1)
贪心。
每次
y
y
y除以2。
哪一次距离
x
x
x近就输出。
分数10分(有反例)。
2)
宽搜。
每次由
x
x
x宽搜。
若可以优化,就push入栈中。
可以保证复杂度足够,大约是
O
(
n
e
)
O(ne)
O(ne),
e
e
e是一个大约是
1
0
4
10^4
104的常数。
总体评价
题目十分简单,都是CSP-J第二题难度以下。
不过和以前的不太相同,更加新,活,不像以前几乎都是模板题。