题目传送门

很容易列出期望的方程,高斯消元搞一波
但是常规消元复杂度是$O(r^6)$的
考虑从左到右从上到下编号
然后按编号从小到大消元

假设黄点是已经消元的点,那么消下一个点的时候,只有绿点的方程中该项系数不为0
同时,该点的方程中也只有绿点的那些项的系数不为0
由于绿点的个数是$O(r)$的,那么每次消元的复杂度就是$O(r^2)$的
总体消元复杂度就是$O(r^4)$的
然后现在得到了上三角矩阵
由于只需要求$(0,0)$点的值
所以只需要把那一行的其它元消掉
这个的复杂度也是$O(r^4)$的
总体复杂度是$O(r^4)$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long LL;
typedef pair<int, int> P;
const int mod = 1e9 + 7;
const int maxn = 8005;
int add(int x, int y) {
x += y;
大专栏  Circles of Waiting"line"> if(x >= mod) x -= mod;
return x;
}
int mul(int x, int y) {
LL z = 1LL * x * y;
return z - z / mod * mod;
}
int powt(int a, int b) {
int r = 1;
while(b) {
if(b & 1) r = mul(r, a);
a = mul(a, a);
b >>= 1;
}
return r;
}
int f[maxn][maxn];
int id[111][111], a[4], dx[4] = { -1, 0, 1, 0}, dy[4] = {0, -1, 0, 1};
vector<int> c;
int main() {
#ifdef CX_TEST
freopen("E:\program--GG\test_in.txt", "r", stdin);
#endif
int n = 0, r, i, j, k, x, y, u, v;
scanf("%d", &r);
for(i = j = 0; i < 4; i++) {
scanf("%d", &a[i]);
j += a[i];
}
j = powt(j, mod - 2);
for(i = 0; i < 4; i++) a[i] = mod - mul(a[i], j);
for(i = -r; i <= r; i++) {
for(j = -r; j <= r; j++) {
if(i * i + j * j <= r * r) id[i + 55][j + 55] = ++n;
}
}
for(i = -r; i <= r; i++) {
for(j = -r; j <= r; j++) {
if(u = id[i + 55][j + 55]) {
f[u][0] = f[u][u] = 1;
for(k = 0; k < 4; k++) {
x = i + dx[k];
y = j + dy[k];
if(v = id[x + 55][y + 55]) f[u][v] = a[k];
}
}
}
}
for(i = 1;i <= n; i++) {
u = min(n, i + r * 2 + 1);
c.clear();
c.push_back(0);
for(j = i;j <= u; j++) {
if(f[i][j]) c.push_back(j);
}
for(j = i + 1;j <= u; j++) {
if(f[j][i]) {
v = mul(mod - f[j][i], powt(f[i][i], mod - 2));
for(auto e:c) f[j][e] = add(f[j][e], mul(f[i][e], v));
}
}
}
u = id[55][55];
for(i = 1;i <= n; i++) {
if(i == u) continue;
if(f[u][i]) {
v = mul(mod - f[u][i], powt(f[i][i], mod - 2));
for(j = 0;j <= n; j++) f[u][j] = add(f[u][j], mul(f[i][j], v));
}
}
v = powt(f[u][u], mod - 2);
printf("%dn", mul(f[u][0], v));
return 0;
}

Circles of Waiting的更多相关文章

  1. CF963E Circles of Waiting

    Circles of Waiting 求一个整点四连通随机游⾛,离原点距离超过R期望步数.R≤50. 带状矩阵法 本质上就是网格图的随机游走. \[ E_x=\sum_y P_{x,y}E_y+1 \ ...

  2. [CF963E]Circles of Waiting[高斯消元网格图优化+期望]

    题意 你初始位于 \((0,0)\) ,每次向上下左右四个方向走一步有确定的概率,问你什么时候可以走到 以 \((0,0)\)为圆心,\(R\) 为半径的圆外. \(R\le 50\) 分析 暴力 \ ...

  3. Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1)

    A. Alternating Sum 就是个等比数列,特判公比为 $1$ 的情况即可. #include <bits/stdc++.h> using namespace std; ; ; ...

  4. the user operation is waiting

    eclipse在编辑完代码保存的时候,弹出一个进度框,等N长时间,标题是"user operation is waiting",里面显示的是building workspace的进 ...

  5. Centos:Another app is currently holding the yum lock; waiting for it to exit...

    Another app is currently holding the yum lock; waiting for it to exit... 另一个应用程序是:PackageKit 内存: 27 ...

  6. Database 'xxxx' is being recovered. Waiting until recovery is finished.

    巡检发现一个SQL SERVER Express 2005数据库备份时出现下面错误: Database 'xxxx' is being recovered. Waiting until recover ...

  7. 关于eclipse保存代码很慢,提示the user operation is waiting的问题

    关于eclipse保存代码很慢,提示the user operation is waiting的问题 首先 去掉 project - build Automaticlly 然后 project-> ...

  8. android模拟器停在Waiting for HOME解决方案

    直接打开Android SDK Manager然后再从Android SDK Manager里的tools打开Android AVD Manager,删除掉在Eclipse里创建的模拟器.并在新建一个 ...

  9. ORA-04021 timeout occurred while waiting to lock object

    用户要求删除一个数据库的用户 GREENPASS,在删除的过程中,报错如下: drop user GREENPASS * ERROR at line 1: ORA-04021: timeout occ ...

随机推荐

  1. 八、Shell脚本高级编程实战第八部

    一.使用for循环在/oldboy目录下创建10个文件名为oldboy-x的文件 #!/bin/sh[ ! -d /oldboy ] && mkdir -p /oldbfor i in ...

  2. 对于 C语言的扩展和JAVA的重载理解

    哎,又被学长看成笨蛋了  ,先前学习java,自己真是什么都要忘了,弄得自己连java最重要的概念--重载,都不知道是啥,还厚着脸皮和学长说  是函数名字一样  ,但是就是函数里面的参数和参数类型不一 ...

  3. 1年6亿美元!Uber小费功能或引行业变革

    当一个行业由稚嫩走向成熟,必然要在大方向上面对两个选择--一是继续在行业内深挖,二是不断向外围扩张.就像电商行业原本只是纯粹的交易中介形态,现在既不断深挖垂直电商新模式,又继续拓展新业务试图玩转跨界. ...

  4. $identify 的 “identify” 表示一个Perl标识符,即 identifier

    $identify 的 “identify” 表示一个Perl标识符,即 identifier

  5. iTOP-4412开发板qt4文件的移植和修改

    在 7.4 小节介绍配置文件的时候,提到迅为制作的触摸库文件“/usr/local/tslib”,迅为 已经将触摸功能编译到 Qt/E4.7.1 的库文件中,开发板可以支持触摸和鼠标功能. 用户在前面 ...

  6. 108)PHP分页显示

    一个代码页的链接:https://www.cnblogs.com/mmykdbc/p/6688460.html 首先一个简单的代码展示: 目录关系: 数据库表格展示: 结果展示:   然后  代码展示 ...

  7. 28)PHP,数据库连接类

    PHP代码展示: <?php //类名,也习惯上(推荐)使用跟文件名相似的名字 //定义一个类,该类可以连接mysql数据库 //并连接后返回资源(或失败就终止) class mysqlDB{ ...

  8. kubectl 命令详解

    使用kubectl来管理Kubernetes集群. kubectl命令的选项: 选项 作用 --alsologtostderr[=false] 同时输出日志到标准错误控制台和文件 --api-vers ...

  9. The Five-Number Summary|Boxplots

    3.3 The Five-Number Summary; Boxplots the deciles divide a data set into tenths (10 equal parts), th ...

  10. VBA自动点击IE的浏览按钮、自动选择路径、自动关闭打开文件对话框

    VBA调用InternetExplorer操作IE浏览器,自动弹出文件选择对话框时,VBA会处于阻塞状态,你必须手工关闭文件选择对话框,VBA才能继续向后运行. 例如下面网址,就有一个文件浏览按钮: ...