$$ \newcommand{\seq}[2]{{#1}_{1},{#1}_{2},\cdots,{#1}_{#2}} \newcommand{\num}[1]{1,2,\cdots,#1} \newcommand{\stra}[2]{\begin{bmatrix}#1 \\ #2\end{bmatrix}} \newcommand{\strb}[2]{\begin{Bmatrix}#1 \\ #2\end{Bmatrix}} \newcommand{\dw}[1]{\underline{#1}} \newcommand{\up}[1]{\overline{#1}} $$

Codeforces 989

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\) 条直线。在这些直线上选择一个点作为起点,并进行以下操作:

  1. 若当前所在点 \(∉S\) ,等概率随机选择该点所在直线上的一个点(这个点要 \(\in S\) ),并传送到该点;
  2. 若当前所在点 \(\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^2\log n)\)

posted @ 2019-01-26 10:42  chc_1234567890  阅读(188)  评论(0编辑  收藏  举报