989 D
题意
若干个长度为 (l) 的区间以 (±1) 的速度在数轴上移动,(t=0) 时刻的位置为 (x_i) 。现在可以给每个区间速度增加 (w(|w|le w_{max}),w_{max}) 给出。若存在一个 (w) ,使区间 (i,j) 能同时覆盖原点(仅边缘覆盖的情况不算),则记为 ((i,j)) 。问所有 ((i,j)) 的个数。((1≤n≤10^5,1≤l,w_{max}≤10^8))
Examples
Input
5 1 2
-2 1
2 1
3 -1
5 -1
7 -1
Output
4
Input
4 10 1
-20 1
-10 -1
0 1
10 -1
Output
1
解
转换参考系。假设每个区间的速度就为 (±1) ,原点的速度为 (-w) 。画出区间和原点的 (x-t) 图像(横轴为 (x) ,纵轴为 (t) ):
然后,按 (x_i) 给区间排序,用二分或two_pointers即可解决。
相向而行的区间 (i,j) 能同时覆盖原点的条件为:(|x[i]+x[j]+l|ge w*(x[j]-x[i]+l))
989 E
题意
平面上有 (n) 个点,构成点集 (S) ,构成至多 (n^2) 条直线。在这些直线上选择一个点作为起点,并进行以下操作:
- 若当前所在点 (∉S) ,等概率随机选择该点所在直线上的一个点(这个点要 (in S) ),并传送到该点;
- 若当前所在点 (in S),在经过该点的所有直线中等概率随机选择一条,并等概率随机选择该直线上的一个点,并传送到该点。
有 (Q) 个询问。每个询问有两个参数 (m,p) ,表示走 (m) 步到 (p) 点的概率是多少。((2≤n≤200,−10^4≤x_i,y_i≤10^4,(x_i,y_i)≠(x_j,y_j)(i≠j),1≤Q≤200))
Examples
Input
5
0 0
1 3
2 2
3 1
4 4
10
1 1
2 1
3 1
4 1
5 1
3 2
3 3
3 4
3 5
3 6
Output
0.5000000000000000
0.5000000000000000
0.3333333333333333
0.5000000000000000
0.5000000000000000
0.1851851851851851
0.1522633744855967
0.1449474165523548
0.1433216481227455
0.1429603662494990
解
搞出一个类似倍增的东西。
设 (dp[t][i][j]) 表示第 (2^t) 步从点 (i) 走到点 (j) 的概率是多少。
转移:(dp[t][i][j]=sum_{k}dp[t-1][i][k]+dp[t-1][k][j])
(dp[0][i][j]=sum_{i}frac{1}{num[l[i]]·cnt[i]}) ,其中 (num[l[i]]) 表示经过点 (i) 的直线 (l[i]) 上的 (in S) 的点有几个, (cnt[i]) 表示经过点 (i) 有几条直线。
处理询问时,先把后 (m-1) 步处理掉,第 (1) 步由于起点可能 (∉S) ,所以需单独处理。
时间复杂度(O(qn^2log n))