一、building4
第一道题目叫做building4,题目的大概意思是:有一条路,上面准备修
2
n
2n
2n个建筑物,其中每个建筑物有两个方案,如果用第一个方案(方案
A
A
A),就得花
a
i
a_i
ai元;如果用第二个方案(方案
B
B
B),就得花
b
i
b_i
bi元。规定使用
A
A
A方案的次数必须等于
n
n
n,使用
B
B
B方案的次数也必须等于
n
n
n。设
c
i
c_i
ci是选择的
A
A
A或
B
B
B方案的钱,则必须满足
c
i
<
c
i
+
1
c_i < c_{i+1}
ci<ci+1
(
1
≤
i
≤
2
n
−
1
)
(1\leq i\leq 2n-1)
(1≤i≤2n−1)。要求输出方案。
这是这道题的子任务和数据:
我先想做子任务
1
1
1,就是用搜索来做,先枚举两个方案,然后判断
A
A
A方案的次数是否等于
B
B
B方案的次数,如果等于,就输出方案。
但是接着一想这种搜索的时间是
O
(
2
2
n
)
=
O
(
4
×
2
n
)
O(2^{2n})=O(4×2^{n})
O(22n)=O(4×2n),如果
n
=
2000
n=2000
n=2000可定会爆的,甚至连
n
=
30
n=30
n=30都会爆。好吧,我只能另辟蹊径了。最后我以
0
0
0分告终。
虽然比赛结束之后我仍未想到方法,但是这道题是最简单的——对于这次比赛来说。
二、hamburg
第二题叫做hamburg,这道题的题目大意是:有
N
N
N个矩形,现在要找到
K
K
K个位置,满足这
K
K
K个位置在这
N
N
N个矩形中,保证数据一定有方案。现在要求任意输出一种方案。
子任务与数据如下:
这道题我的思路是进行枚举搜索,但是发现这个矩形的坐标竟然达到了
1
0
9
10^9
109,这种情况进行枚举不是找死吗,虽然我打了一个暴力,但是交上去却运行时错误,看来这道题不能暴力。我在思考能否做子任务
1
1
1,因为
K
=
1
K=1
K=1,所以应该可以找规律,可惜我没有想到办法,这题又以
0
0
0分告终。
难道我只能得
0
0
0分吗,我问自己,虽然题目超级超级超级难,但是我一定要拿一点分。
三、Sweeping
第三道题叫做Sweeping。
题目大意:在一个腰为
N
N
N的等腰直角三角形中,有一些垃圾,现在要扫出这些垃圾,其中有两种方法(方法
H
H
H和方法
V
V
V),现在要求第
P
j
P_j
Pj个垃圾
(
1
≤
j
≤
Q
)
(1\leq j\leq Q)
(1≤j≤Q)的坐标,这里
Q
Q
Q代表询问数。
这道题的子任务与数据也都很变态,如下:
看了数据后,我决定要将子任务
1
1
1做出来,并尝试子任务
2
2
2。子任务
1
1
1的数据小,我很快就有了一个思路,这个思路的时间复杂度为
O
(
M
Q
)
O(MQ)
O(MQ),可以过。我花了
10
10
10分钟就把代码打了出来,试了几个样例都完全正确,这下我放心了。我把代码交到比赛网站上,开始等待结果。过了
1
1
1分钟左右,不出我所料,我成功的拿到了
1
1
1分。虽然说一分甚少,但是我觉得已经足够了。
我开始想如何优化我的程序,首先我想到的是用堆进行优化,但是我一时间没想到如何编写代码,所以我又开始想另一个方法。我注意到子任务
3
3
3里面有条件
X
j
≤
X
j
+
1
X_j\leq X_{j+1}
Xj≤Xj+1,
Y
j
≥
Y
j
+
1
Y_j\geq Y_{j+1}
Yj≥Yj+1
(
1
≤
j
≤
M
−
1
)
(1\leq j\leq M-1)
(1≤j≤M−1),就感觉可以拿到
11
11
11分了,但是,后面我绞尽脑汁也没有想到如何优化。
四、对第一天的总结
我虽然拿到了
1
1
1分,排名也是几百名,但是我心满意足,毕竟我只是去体验罢了。后来我才听说,这个比赛是国家队水平的——我才小学生,能做出什么吗?
我一心盼想明天的比赛,希望不会一天比一天难,我更希望明天有答案提交题——这可以使我拿到很多分。
第二天加油!