Circles of Waiting洛谷黑题题解

Circles of Waiting

题面翻译

在平面直角坐标系上,有一个神奇的点,一开始在 ( 0 , 0 ) (0, 0) (0,0) 。每秒钟这个点都会随机移动:如果它在 ( x , y ) (x, y) (x,y) ,下一秒它在 ( x − 1 , y ) (x - 1, y) (x1,y) 的概率是 p 1 p_1 p1 ,在 ( x , y − 1 ) (x, y - 1) (x,y1) 的概率是 p 2 p_2 p2 ,在 ( x + 1 , y ) (x + 1, y) (x+1,y) 的概率是 p 3 p_3 p3 ,在 ( x , y + 1 ) (x, y + 1) (x,y+1) 的概率是 p 4 p_4 p4 。保证 p 1 + p 2 + p 3 + p 4 = 1 p_1 + p_2 + p_3 + p_4 = 1 p1+p2+p3+p4=1 ,各次移动互不关联。

求出这个点移动至距离原点距离为大于 R R R 的点的期望步数。距离为欧几里得距离。

感谢@OrangeLee 提供的翻译

题目描述

A chip was placed on a field with coordinate system onto point $ (0,0) $ .

Every second the chip moves randomly. If the chip is currently at a point $ (x,y) $ , after a second it moves to the point $ (x-1,y) $ with probability $ p_{1} $ , to the point $ (x,y-1) $ with probability $ p_{2} $ , to the point $ (x+1,y) $ with probability $ p_{3} $ and to the point $ (x,y+1) $ with probability $ p_{4} $ . It’s guaranteed that $ p_{1}+p_{2}+p_{3}+p_{4}=1 $ . The moves are independent.

Find out the expected time after which chip will move away from origin at a distance greater than $ R $ (i.e. will be satisfied).

输入格式

First line contains five integers $ R,a_{1},a_{2},a_{3} $ and $ a_{4} $ ( $ 0<=R<=50,1<=a_{1},a_{2},a_{3},a_{4}<=1000 $ ).

Probabilities $ p_{i} $ can be calculated using formula .

输出格式

It can be shown that answer for this problem is always a rational number of form , where .

Print $ P·Q^{-1} $ modulo $ 10^{9}+7 $ .

样例 #1

样例输入 #1

0 1 1 1 1

样例输出 #1

1

样例 #2

样例输入 #2

1 1 1 1 1

样例输出 #2

666666674

样例 #3

样例输入 #3

1 1 2 1 2

样例输出 #3

538461545

提示

In the first example initially the chip is located at a distance $ 0 $ from origin. In one second chip will move to distance $ 1 $ is some direction, so distance to origin will become $ 1 $ .

Answers to the second and the third tests: and .# Circles of Waiting

题面翻译

在平面直角坐标系上,有一个神奇的点,一开始在 ( 0 , 0 ) (0, 0) (0,0) 。每秒钟这个点都会随机移动:如果它在 ( x , y ) (x, y) (x,y) ,下一秒它在 ( x − 1 , y ) (x - 1, y) (x1,y) 的概率是 p 1 p_1 p1 ,在 ( x , y − 1 ) (x, y - 1) (x,y1) 的概率是 p 2 p_2 p2 ,在 ( x + 1 , y ) (x + 1, y) (x+1,y) 的概率是 p 3 p_3 p3 ,在 ( x , y + 1 ) (x, y + 1) (x,y+1) 的概率是 p 4 p_4 p4 。保证 p 1 + p 2 + p 3 + p 4 = 1 p_1 + p_2 + p_3 + p_4 = 1 p1+p2+p3+p4=1 ,各次移动互不关联。

求出这个点移动至距离原点距离为大于 R R R 的点的期望步数。距离为欧几里得距离。

感谢@OrangeLee 提供的翻译

题目描述

A chip was placed on a field with coordinate system onto point $ (0,0) $ .

Every second the chip moves randomly. If the chip is currently at a point $ (x,y) $ , after a second it moves to the point $ (x-1,y) $ with probability $ p_{1} $ , to the point $ (x,y-1) $ with probability $ p_{2} $ , to the point $ (x+1,y) $ with probability $ p_{3} $ and to the point $ (x,y+1) $ with probability $ p_{4} $ . It’s guaranteed that $ p_{1}+p_{2}+p_{3}+p_{4}=1 $ . The moves are independent.

Find out the expected time after which chip will move away from origin at a distance greater than $ R $ (i.e. will be satisfied).

输入格式

First line contains five integers $ R,a_{1},a_{2},a_{3} $ and $ a_{4} $ ( $ 0<=R<=50,1<=a_{1},a_{2},a_{3},a_{4}<=1000 $ ).

Probabilities $ p_{i} $ can be calculated using formula .

输出格式

It can be shown that answer for this problem is always a rational number of form , where .

Print $ P·Q^{-1} $ modulo $ 10^{9}+7 $ .

样例 #1

样例输入 #1

0 1 1 1 1

样例输出 #1

1

样例 #2

样例输入 #2

1 1 1 1 1

样例输出 #2

666666674

样例 #3

样例输入 #3

1 1 2 1 2

样例输出 #3

538461545

提示

In the first example initially the chip is located at a distance $ 0 $ from origin. In one second chip will move to distance $ 1 $ is some direction, so distance to origin will become $ 1 $ .

Answers to the second and the third tests: and .

题意
在平面直角坐标系上有一个初始在 (0,0)(0,0) 的点,每秒钟这个点都会随机移动 ,求出这个点移动至距离原点欧几里得距离大于 RR 的点的期望时间。数据范围
0\leqslant R\leqslant500⩽R⩽50,0\leqslant p1,p2,p3,p40⩽p1,p2,p3,p4 ,答案对 10^9+710 9+7取模分析
wxh论文中的例题。本题有两种方法,O(R^4)O(R 4) 的直接消元和 O(R^3)O(R 3) 的主元法,本文主要介绍第二种方法。设 f(i,j)f(i,j) 表示从 (i,j)(i,j) 出发走出圈的期望步数,那么根据题意,有:对于在圈外面的点 f(i,j)=0f(i,j)=0。这样就可以高斯消元做了,但由于方程数是 O(R^2)O(R 2 ) 的,朴素实现复杂度为 O(R^6)O(R 6 ),无法通过此题。注意到原图为网格图,那么只要钦定一个方向和一组初始点的 ff 作为主元,就可以把所有的点的 ff 用主元表示出来,最后通过圈外点 f=0f=0 列方程,解出初始点的 ff 值,带入 f(0,0)f(0,0) 求解即可。具体实现上钦定方向从左到右,将每行从左到右第一个点作为主元,共 2R+12R+1 个。转移到一个点时,其左边的点都是已知的,这就可以直接转移了,转移到某个圈外点时就得到一个方程 f(i+1,j)=0f(i+1,j)=0,最后有 2*R+12∗R+1 个未知数和方程,高斯消元的复杂度就降为 O(R^3)O(R 3)了。代码
代码中为了方便使用优先队列来保证左边的点先被转移,不过不影响复杂度。
#include<bits/stdc++.h>
#define Mod 1000000007
#define _gc getchar()
#define ll long long
#define FOR(i,a,b) for(register int i=a;i<=b;i++)
#define ROF(i,b,a) for(register int i=b;i>=a;i--) 
using namespace std;
inline int read(){int x=0;char s=_gc;while('0'>s||s>'9')s=_gc;while('0'<=s&&s<='9'){x=x*10+s-48;s=_gc;}return x;
}
ll fast(ll x,ll p){ll now=1;while(p){if(p&1)now=now*x%Mod;x=x*x%Mod;p>>=1;}return now;}
ll Inv(ll x){return fast(x,Mod-2);}
const int N=111;
int n,tot;
ll R,a1,a2,a3,a4,Ans,ans[N],b[N][N];
bool book[N*N],Ed[N*N]; struct vec{int x,y;friend bool operator < (vec x,vec y){return x.x>y.x;}};
struct node{ll a[N];friend node operator * (ll x,node y){FOR(i,0,2*R+1)y.a[i]=y.a[i]*x%Mod;return y;}	friend node operator + (node y,ll x){y.a[2*R+1]=(y.a[2*R+1]+x)%Mod;return y;}friend node operator + (node x,node y){FOR(i,0,2*R+1)x.a[i]=(x.a[i]+y.a[i])%Mod;return x;}	
};
node f[N*N];
priority_queue<vec>q;void Calc(){FOR(i,0,2*R){if(!b[i][i]){int ok=0;FOR(j,i+1,2*R)if(b[j][i]){FOR(k,i,2*R+1)swap(b[i][k],b[j][k]);ok=1;break;}if(!ok)return ;}ll INV=Inv(b[i][i]);FOR(j,i+1,2*R){ll p=(Mod-b[j][i])*INV%Mod;FOR(k,i,2*R+1)b[j][k]=(b[j][k]+p*b[i][k]%Mod+Mod)%Mod;}}ROF(i,2*R,0){ans[i]=b[i][2*R+1]*Inv(b[i][i])%Mod;	FOR(j,0,i-1)b[j][2*R+1]=(b[j][2*R+1]-ans[i]*b[j][i]%Mod+Mod)%Mod;}
}int mark(int x,int y){return (y+R+1)*n+(x+R+2);}
bool cmp(vec x,vec y){return x.x<y.x;}
int main(){R=read(),a1=read(),a2=read(),a3=read(),a4=read();n=2*R+3;ll p=Inv(a1+a2+a3+a4);a1=a1*p%Mod,a2=a2*p%Mod,a3=a3*p%Mod,a4=a4*p%Mod;	FOR(i,-R,R)FOR(j,-R,R)if(i*i+j*j<=R*R)book[mark(i,j)]=1;FOR(j,-R,R)FOR(i,-R,0)if(book[mark(i,j)]){f[mark(i,j)].a[j+R]=1,q.push(vec{i,j});break;}		FOR(j,-R,R)ROF(i,R,-R)if(book[mark(i,j)]){Ed[mark(i+1,j)]=1;break;}while(!q.empty()){int X=q.top().x,Y=q.top().y;q.pop();	if(!book[mark(X+1,Y)]&&!Ed[mark(X+1,Y)])continue;f[mark(X+1,Y)]=Inv(a3)*((f[mark(X,Y)]+(Mod-1))+((Mod-a1)*f[mark(X-1,Y)])+((Mod-a2)*f[mark(X,Y-1)])+((Mod-a4)*f[mark(X,Y+1)]));		                   if(Ed[mark(X+1,Y)]){FOR(i,0,2*R+1)b[Y+R][i]=f[mark(X+1,Y)].a[i];b[Y+R][2*R+1]=Mod-b[Y+R][2*R+1];	} else q.push(vec{X+1,Y});}Calc();ans[2*R+1]=1;FOR(i,0,2*R+1)Ans=(Ans+f[mark(0,0)].a[i]*ans[i]%Mod)%Mod;cout<<Ans;return 0;
}

/*
0 1 1 1 1

1 1 1 1 1

1 1 2 1 2

20 98 234 546 123

2 235 543 123 432

3 235 543 123 432
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在WIN从零开始在QMUE上添加一块自己的开发板(二)

文章目录 一、前言往期回顾 二、CPU虚拟化&#xff08;一&#xff09;相关源码&#xff08;二&#xff09;举个例子&#xff08;三&#xff09;测试 三、内存虚拟化&#xff08;一&#xff09;相关源码&#xff08;二&#xff09;举个例子测试 参考资料 一、前言 笔者这篇博客…

力扣日记1.21-【回溯算法篇】77. 组合

力扣日记&#xff1a;【回溯算法篇】77. 组合 日期&#xff1a;2023.1.21 参考&#xff1a;代码随想录、力扣 终于结束二叉树了&#xff01;听说回溯篇也是个大头&#xff0c;不知道这一篇得持续多久了…… 77. 组合 题目描述 难度&#xff1a;中等 给定两个整数 n 和 k&#…

LSTM时间序列预测

本文借鉴了数学建模清风老师的课件与思路&#xff0c;可以点击查看链接查看清风老师视频讲解&#xff1a;【1】演示&#xff1a;基于LSTM深度学习网络预测时间序列&#xff08;MATLAB工具箱&#xff09;_哔哩哔哩_bilibili % Forecast of time series based on LSTM deep learn…

敏捷测试和DevOpes自动化测试的区别

敏捷测试和DevOps自动化测试在以下方面存在区别&#x1f447; 1️⃣目标 &#x1f388;敏捷测试的主要目标是提供快速的反馈和持续的改进&#xff0c;以便在开发过程中尽早发现和解决问题&#xff0c;从而提高软件的质量和可靠性。 &#x1f308;DevOps自动化测试的目标是提高软…

Java学习笔记(七)——操作数组工具类Arrays

文章目录 ArraysArrays.toString()Arrays.binarySearch()Arrays.copyOf()Arrays.copyOfRange()Arrays.fill()Arrays.sort()升序排序降序排序 Arrays 操作数组的工具类。 Arrays.toString() import java.util.Arrays;public class test40 {public static void main(String[] a…

【Docker篇】详细讲解容器相关命令

&#x1f38a;专栏【Docker】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f6f8;容器&#x1f339;相关命令&#x1f354;案例⭐创建并运…

第四课:GPT2

文章目录 第四课&#xff1a;GPT21、学习总结&#xff1a;GPT2的学习目标和概念任务调节零样本学习和零短任务迁移 模型结构GPT-2 自注意力掩码实现1- 创建qkv2- 评分3- 合并注意力头4- Projecting 课程ppt及代码地址 2、学习心得&#xff1a;3、经验分享&#xff1a;4、课程反…

AWS 专题学习 P8 (ECS、EKS、Lambda、CloudFront、DynamoDB)

文章目录 什么是 Docker&#xff1f;操作系统上的 DockerDocker 镜像存储Docker vs. Virtual MachinesDocker 入门AWS 中的 Docker Containers Management Amazon ECSEC2 Launch TypeFargate Launch TypeECS 的 IAM RolesLoad Balancer IntegrationsData Volumes (EFS)ECS Serv…

Object.prototype.toString.call个人理解

文章目录 这段代码的常见用处参考文献&#xff1a; 拆分理解1、Object.prototype.toString小问题参考文献&#xff1a; 2、call函数的作用参考文献 3、继续深入一些&#xff08;这部分内容是个人理解&#xff0c;没有明确文献支撑&#xff09; 这段代码的常见用处 Object.prot…

easy Exsel导出

目录 一、首先引入依赖 二、然后封装一个VO 三、Controller层 四、Service实现类 引用样式 自适应列宽 自适应行高 五、测试 postman ​编辑 浏览器 异常 分配到这个任务了&#xff0c;写个小demo记录下&#xff0c;具体可参考EasyExcel官方文档 我用的是web上传…

CCC数字钥匙设计【NFC基础】--LPCD相关介绍

关于NFC卡检测&#xff0c;主要可以分成两个步骤&#xff1a; 1、LPCD低功耗检测&#xff0c;唤醒NFC读卡器。 2、唤醒后&#xff0c;NFC读卡器或MCU控制器轮询Type A、Type B、Type F、Type V&#xff08;ISO15693&#xff09;等卡类型。 本文主要介绍LPCD相关功能&#xff…

设备管理——WinCC 给你神助功

要实现“设备高效”&#xff0c;就必须“管之有道”&#xff0c;来自设备层的数据支撑将是必不可少的&#xff0c;提高设备效能的2个关键在于降低平时停机时间 (MDT) 和提高平均无故障时间 (MTBF)。通常来说&#xff0c;设备维护可大致可分为三个层次&#xff1a;纠正性维护&am…

c++ mysql数据库编程(linux系统)

ubuntu下mysql数据库的安装 ubuntu安装mysql&#xff08;图文详解&#xff09;-CSDN博客https://blog.csdn.net/qq_58158950/article/details/135667062?spm1001.2014.3001.5501 项目目录结构 数据库及表结构 public.h //打印错误信息 #ifndef PUBLIC_h #define PUBLIC_H…

【详解】通讯录项目

目录 通讯录项目要求&#xff1a; 引言&#xff1a; 步骤如下&#xff1a; 用户的数据类型&#xff1a; 初始化循序表&#xff1a; 菜单&#xff1a; 添加联系人&#xff1a; 删除联系人&#xff1a; 修改联系人&#xff1a; 查找联系人&#xff1a; 查看通讯录&…

《WebKit 技术内幕》之七(1): 渲染基础

《WebKit 技术内幕》之七&#xff08;1&#xff09;&#xff1a; 渲染基础 WebKit的布局计算使用 RenderObject 树并保存计算结果到 RenderObject 树。 RenderObject 树同其他树&#xff08;如 RenderLayer 树等&#xff09;&#xff0c;构成了 WebKit 渲染的为要基础设施。 1…

【RT-DETR有效改进】Google | EfficientNetV1一种超轻量又高效的网络 (附代码 + 添加教程)

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…

python算法与数据结构---排序和归并排序

学习目标 掌握归并排序的基本原理使用python语言解答归并排序题目 归并排序 原理及过程 将两个有序的数组合并成一个有序数组称为从上往下分解&#xff1a;把当前区间一分为二&#xff0c;直至分解为若干个长度为1的子数组从上往下的合并&#xff1a;两个有序的子区域两两向…

Pytest 测试框架与Allure 测试报告——Allure2测试报告-L1

目录&#xff1a; allure2安装 Allure2介绍Allure2报告展示Allure2报告展示-首页概览Allure2报告展示-用例详情页Allure2安装Allure2下载与安装Allure环境验证插件安装-Python插件安装-Java验证插件安装-Javaallure2运行方式 生成测试报告流程使用Allure2运行方式-Python使用A…

大模型关键技术:上下文学习、思维链、RLHF、参数微调、并行训练、旋转位置编码、模型加速、大模型注意力机制优化、永久记忆、LangChain、知识图谱、多模态

大模型关键技术 大模型综述上下文学习思维链 CoT奖励建模参数微调并行训练模型加速永久记忆&#xff1a;大模型遗忘LangChain知识图谱多模态大模型系统优化AI 绘图幻觉问题从 GPT1 - GPT4 拆解GPTs 对比主流大模型技术点旋转位置编码层归一化激活函数注意力机制优化 大模型综述…

四种方法将 Docker Registry 迁移至 Harbor

Registry Docker Distribution Docker Distribution 是第一个是实现了打包、发布、存储和镜像分发的工具&#xff0c;起到 docker registry 的作用。&#xff08;目前 Distribution 已经捐赠给了 CNCF&#xff09;。其中 Docker Distribution 中的 spec 规范后来也就成为了 O…