Day 11
10
T1 数学题(math)
容易注意到,当夹角大于等于pi/3时,答案为max(
∣
a
∣
2
|a|^2
∣a∣2,
∣
b
∣
2
|b|^2
∣b∣2)
证明:
我们有两个向量a,b,两个实数x,y.
a与b的夹角为A
(
a
x
+
b
y
)
2
=
∣
a
x
∣
2
+
∣
b
x
∣
2
+
2
c
o
s
A
∣
a
x
∣
∣
b
x
∣
(ax+by)^2=|ax|^2+|bx|^2+2cosA|ax||bx|
(ax+by)2=∣ax∣2+∣bx∣2+2cosA∣ax∣∣bx∣
当A>=pi/3时,cosA<=1/2
我们有
(
a
x
+
b
y
)
2
<
=
∣
a
x
∣
2
+
∣
b
x
∣
2
+
∣
a
x
∣
∣
b
x
∣
(ax+by)^2<=|ax|^2+|bx|^2+|ax||bx|
(ax+by)2<=∣ax∣2+∣bx∣2+∣ax∣∣bx∣
容易注意到,每一项都为正数。
当x=0或y=0时,
∣
a
x
∣
2
+
∣
b
x
∣
2
|ax|^2+|bx|^2
∣ax∣2+∣bx∣2有最小值。
我们处理好了夹角大于等于pi/3的情况,那么夹角小于pi/3的怎么处理呢?
T2 挖宝藏
斯坦纳树来处理压缩后的状态转移。
…
T3【NOI2014模拟7.11】理想城市(city)
将横着的联通块看做一个点,每个点如果竖着可以到达就连边。这样我们就把图缩成了一颗树。统计树上每条边贡献即可。
再将竖着的联通块看作一个点,同理。
AtCoder
AtCoder Beginner Contest 137
rk 413
A
输出max(a+b, max(a-b, a*b))
B
输出x-k+1到x+k-1之间的所有数
C
题目大意
有
n
n
n个字符串,如果有一对字符串所有字符出现的次数相等,我们称它们是明文和密文的关系。
例如:
ababab
bababa
这两个字符串就是明文和密文的关系。
问所有满足明文和密文的关系的字符串有几对。
Solution
这题我一开始想的非常复杂,最后才恍然大悟。
将每个字符串按照ascii码顺序排好,再将n个字符串按照字典序排序,扫一遍就可以统计答案了。
D
题目大意
有n个工作,每个工作会持续w天,做完这份工作会获得v的收益,你在每天都可以接一个工作(不能重复接一个),无论你之前的工作有没有完成。
Solution
将工作以价值大为第一关键字,时间大为第二关键字排序。
贪心的优先选择价值大,时间长的工作先接。
如何判断接到工作后能否完成?
用一个线段树来维护空闲点。
query(L,R)表示在[L,R]内最大的空闲点是多少。
对于每个工作,我们进行query(1, m-
w
i
w_i
wi+1)查找最大的空闲点即可。
如果没有空闲点,我们就不能加这个工作的价值。
还要注意的是,m-
w
i
w_i
wi+1要>=1
E
题目大意
一个有环、有重边、有自环的有向图,每条边都有权
w
i
w_i
wi,我们每走过一条边,就会多
w
i
w_i
wi个金币。走过一条边得到金币的同时,也会付出
p
p
p的金币。问从
1
1
1到
n
n
n,能得到的最大权值是多少?
保证从
1
1
1到
n
n
n至少有一条路径可以到达。
如果可以得到无限大的金币数,输出"-1"。
Solutin
我们先把
w
i
w_i
wi都减去
p
p
p。
看到这样求最大权值,还有环的,我们就想到spfa求最长路然后顺便判一下正环。
但是这样做的话,我们有一些情况没有考虑到。
对于这样的数据:
4 5 10
1 2 1
1 4 1
3 4 1
2 2 100
3 3 100
的确,我们找到了正环,但是到达了2号点就再也不能到4号点了,我们有再多金币也是没有意义的。
考虑如何处理连通性。
我们先将边反向。
从n号点开始bfs伸展到每个点,找出可以到达n号点的点集,并做上标记。
在spfa的过程中,我们将点集缩小为可以到达n号点的点集,这样就避免了像上图所示的有环却没有意义的情况。
注意:最后统计过路费的时候,如果你手上的金币小于过路费,是不会有负数的。(只会把你的钱全部拿走)
输出max(0, dis[n])即可。