时间安排
7
:
50
−
8
:
10
7:50-8:10
7:50−8:10 把四道题都看了一遍,T1二分查找,T2像是dp,T3高精?T4应该是个找规律,而且看着就是CF的题。
8
:
10
−
8
:
50
8:10-8:50
8:10−8:50 就用set和lower_bound模拟整个查找的过程,二分求出下一个点所在的位置。
8
:
50
−
9
:
40
8:50-9:40
8:50−9:40 对于T2,我一直在想到dp,但是发现很难转移,因为你加入一个点后会对后面产生影响,我想了好几种状态:
f
i
f_i
fi 表示有
i
i
i 个人投票的最小代价,
f
i
f_i
fi 表示贿赂了
i
i
i 个人的最小代价等,但都不怎么会转移,所以就写了个20分就去看T3了。
9
:
40
−
10
:
40
9:40-10:40
9:40−10:40 对于T3,我的第一想法是高精dijkstra裸题,但是高精不会,所以考虑利用模数写科学计数法,即对于一个数记录
x
x
x 和
y
y
y 表示
(
1
0
9
+
7
)
x
+
y
(10^9+7)x+y
(109+7)x+y,然后跑最短路的时候优先比较
x
x
x,但不知道为什么就是答案不对,我查了20分钟也查不出来,感觉写得没什么问题。
10
:
40
−
11
:
50
10:40-11:50
10:40−11:50 对于T4其实我想的时间是最长的,首先考虑无解的情况,不难发现每加入一个长度为
a
i
a_i
ai 的链都可以增加
a
i
−
2
a_i-2
ai−2 个白点,所以无解的情况其实就是全部加起来再减后的值小于
k
k
k,然后考虑有解的情况,首先对于一条链,肯定是中间的那个节点要连接,然后考虑多次连接显然不优,因为你每次连接都至少会增加1的距离,所以我的想法是贪心的找到第一个大于等于
k
k
k 的位置,然后用堆来维护深度,然后在找地
k
k
k 小。
11
:
50
−
12
:
10
11:50-12:10
11:50−12:10 提交。