流浪者(rover)
流浪者(rover)
题目描述
有一位流浪者正在一个n∗mn∗m的网格图上流浪。初始时流浪者拥有SS点体力值。
流浪者会从(1,1)(1,1)走向(n,m)(n,m),并且他只会向下走((x,y)→(x+1,y))((x,y)→(x+1,y))或是往右走((x,y)→(x,y+1))((x,y)→(x,y+1)),在所有可行的路线中他会随机选择一条。
网络图中还有KK个障碍点。若流浪者当前体力值为SS,则他经过一个障碍点后体力值会变为⌈S2⌉⌈S2⌉。
现在请你求出,流浪者到达(n,mn,m)时他体力值的期望是多少。
若答案为abab,则你输出abab在模109+7109+7意义下的值即可。
输入
第一行四个整数n,m,K,Sn,m,K,S, 意义见题目描述。
接下来K行每行两个整数Xi,YiXi,Yi,表示一个障碍点,保证一个障碍点不会出现多次。起点与终点可能也会是障碍点。
输出
仅一行一个整数表示答案。
样例1解释
共有6种合法路径,这里不一一列出。
16∗(6+6+11+3+6+6)=19316∗(6+6+11+3+6+6)=193
约定
30%的数据:n,m≤10n,m≤10
50%的数据:n,m≤1000n,m≤1000
1000%的数据:1≤n,m≤105,0≤K≤min(n∗m,2000),1≤S≤1061≤n,m≤105,0≤K≤min(n∗m,2000),1≤S≤106
solution
slz:经典模型
我:完全不会
30:dfs
50:dp 令f[i][j][k]表示走到i j,经过k个格子的方案数
由于当k>20时对k不同对答案没有影响,最后一维可以只开20
O(nm20)
100:
dp 令f[i][j]表示当前在第i个特殊点,走到终点还会经过恰好j个特殊点的路径数
g[i][j]表示当前在第i个特殊点,走到终点还会经过小于等于j个特殊点的路径数
ways(i,j)表示i到j的路径数
从后往前dp即可
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define maxn 2005
#define mod 1000000007
#define ll long long
using namespace std;
int n,m,K,S,s[24];
ll h[200008],ny[200008],f[maxn][25],g[maxn][23];
ll work(ll a,int num){ll ans=1;while(num){if(num&1)ans=ans*a;a=a*a;a%=mod;ans%=mod;num>>=1;}return ans;
}
struct node{int x,y;
}p[maxn];
bool cmp(node a,node b){return a.x<b.x||a.x==b.x&&a.y<b.y;
}
ll C(int N,int M){return h[N]*ny[M]%mod*ny[N-M]%mod;
}
int main()
{cin>>n>>m>>K>>S;int Max=200005;h[0]=1;for(int i=1;i<=Max;i++)h[i]=h[i-1]*i%mod;ny[Max]=work(h[Max],mod-2);for(int i=Max-1;i>=0;i--)ny[i]=ny[i+1]*(i+1)%mod;s[0]=S;int cnt=0;for(;s[cnt]>1;cnt++)s[cnt+1]=(s[cnt]+1)/2;for(int i=1;i<=K;i++){scanf("%d%d",&p[i].x,&p[i].y);}sort(p+1,p+K+1,cmp);p[0].x=1;p[0].y=1;for(int i=K;i>=0;i--){int xi=p[i].x,yi=p[i].y;for(int j=0;j<cnt;j++){ll sum=0;g[i][j]=C(n-xi+m-yi,n-xi);for(int k=K;k>i;k--){if(p[k].y<p[i].y)continue;int xk=p[k].x,yk=p[k].y;sum+=f[k][j]*C(xk-xi+yk-yi,xk-xi)%mod;sum%=mod;}g[i][j]-=sum;g[i][j]%=mod;}g[i][cnt]=C(n-xi+m-yi,n-xi);for(int j=1;j<=cnt;j++)f[i][j]=(g[i][j]-g[i][j-1])%mod;f[i][0]=g[i][0]; }ll Answer=0;for(int i=0;i<=cnt;i++){Answer+=f[0][i]*s[i]%mod;Answer%=mod;}ll All=C(n+m-2,m-1);Answer=Answer*work(All,mod-2);Answer=(Answer%mod+mod)%mod;printf("%lld\n",Answer);return 0;
}
转载于:https://www.cnblogs.com/liankewei/p/10358784.html
流浪者(rover)相关推荐
- 公告:Rover's Official Blog停止更新
想了几天,终于决定写这么一个公告了.并不是因为写些东西太累或者太占时间而停止了更新,也许就如同前文说是因为今天喝多了酒(呵呵,玩笑),也许如同MSN副标题所言:严重的压力和抑郁,强烈的人格分裂和精神分 ...
- 2018.11.03-dtoj-3130-流浪者(rover)
题目描述: 有一位流浪者正在一个n*m的网格图上流浪.初始时流浪者拥有S点体力值. 流浪者会从(1,1)走向(n,m),并且他只会向下走((x,y)→(x+1,y))或是往右走((x,y)→(x,y+ ...
- Katas编写的Java教程:Mars Rover
编程kata是一种练习,可以帮助程序员通过练习和重复练习来磨练自己的技能. 本文是" 通过Katas进行Java教程 "系列的一部分. 本文假定读者已经具有Java的经验,熟悉单元 ...
- 修一座安全的广厦,庇护赛博世界的流浪者
问一个极具争议的问题:你觉得自己有没有被应用软件追踪? 很多朋友都觉得是,不然怎么解释刚刚在网上搜索过运动鞋,下一秒打开电商软件就能被精准推送相关产品呢? 你并不是一个人. 9月份发布的<App ...
- JPEX联手西悉尼流浪者队 推出250款独家NFT“J-ball”
摘要:JPEX平台联手知名澳超联赛足球俱乐部西悉尼流浪者队,推出了代表权益且具备纪念价值的NFT"J-ball",这是加密资产板块通过NFT赋能体育板块,且与之深度融合的代表性案例 ...
- 看雪ctf 流浪者 WP
看雪ctf 第一题 流浪者 wp 打开程序,提示要验证password,载入OD,按照签到题的思路,改了一个跳转,出现了提示框pass,但是没有flag,应该不是这种思路(我是一个刚入手的萌新,可 ...
- 攻防世界逆向入门题之流浪者
攻防世界逆向入门题之流浪者 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向入门题的流浪者 下载附件,照例扔入exeinfope中查看信息: 32位PE文件无壳,照例扔入ida32中查看伪代码: 是没 ...
- 时光机与流浪者-我的2017
红焰火 望着我 快乐的 那个我 转眼悄悄的回来了 旧门锁 别等我 消失的 那个我 就是我要我的自我 流浪者 就是我 飞过了 洪荒的 神秘宇宙的流浪者 别等我 成全我 忠于我 还给我 做我渴望的那个我 ...
- The Earth Rover
上个月, 近100位大学生软件开发爱好者访问了我们事业部在上海的办公室,我和实习生石超向大家介绍了Azure Services Platform和我们中国团队在其中负责的.NET访问控制服务,并做了一 ...
- 流浪大师善始者众善终者寡_流浪者–适合每个开发人员的瑞士军刀
流浪大师善始者众善终者寡 每当我们转到一个新项目时,或者想要探索新的技术堆栈时,都可以: 我们面临环境问题. 作为开发人员,我们通常倾向于在本地环境中安装所有内容. 多次证明是一场灾难. 如今,现代W ...
最新文章
- 文档过期打不开怎么办_网络上下载文档,常见的3个问题,一招教你快速解决!...
- Python操作ElasticSearch
- 依赖注入之Autofac使用总结
- matlab二重定积分_怎样用matlab求二重积分?
- mysql差几年,MySQL两时间计算、年份差、月份差、天数差
- hover时候缓慢切换两张图片
- chromium 桌面_如何使用Chromium和PyInstaller将Web应用程序转换为桌面应用程序
- 【Elasticsearch】Elasticsearch 集群协调迎来新时代
- 求职与简历功能上线测试
- springmvc 控制器 读取properties文件
- delphi 消息列表中文说明
- Mybatis框架Mybatis下载步骤
- win10 同时多用户远程桌面连接-RDPWrap-v1.6.2-support-21H2-19044.1949
- 搭建vue开发环境的步骤
- Linux卸载驱动方法
- js rsa验签_【HAVENT原创】前端使用 jsrsasign 进行 RSA 加密、解密、签名、验签
- centos7.6安装lnmp环境
- 如何用python来打印一个三角形
- 【MFC】MFC修改菜单名后不更新问题
- python计算学分绩点_GitHub - junfenghu/calc_GPA: 计算学分基点
热门文章
- 超高频RFID电子标签技术和应用分析
- 单招计算机专业常见面试题库,历年高职单招面试常见问题集锦
- python 判断区分字符串是否都是英文/中文
- 初次面试初生牛犊不怕虎,居然觉得面试就是聊天?
- 计算机网络(谢希仁第七版)期末重点
- 深入理解Flash的沙箱
- java时区_Java时区的转换
- ListView组件的应用
- [Unity]Unity3D游戏引擎游戏开发软件相比与其他的优势
- Error Domain=AVFoundationErrorDomain Code=-11841 (null) timeRange 和 duration 不一致