【CF407B】Long Path
时间:2019-11-07
本文章向大家介绍【CF407B】Long Path,主要包括【CF407B】Long Path使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
有个人进入一个迷宫,这个迷宫共有n+1个房间,编号从1~n+1
ta现在在第1个房间,需要到达第n+1个房间以出去。房间i有两个前进的门(来时的门不算)
第一扇门通向第i+1个房间,第二扇门通向第pi(1<=pi<=i)房间
为了不迷路,这个人每到达一个房间,就会给这个房间画一个标记
画完后如果这个房间的标记数为偶数个,ta就会选择这个房间第一扇门前进,否则选择第二扇门前进
求这个人需要通过多少道门到达终点(即第n+1个房间),答案对1000000007取模
很简单的递推
设\(ans[i]\)为第一次到i节点的时间
很显然,如果直接从前一个点走过来,有递推关系:
\[ans[i]+=ans[i-1]+1\]
但由于我们设的是第一次到达这个点的时间,所以还要算出从\(i-1\)号节点绕一大圈又回到\(i-1\)号点的时间:
\[ans[i]+=ans[i-1]+1-ans[fa[i-1]]\]
这个关系很好理解,就是从\(i-1\)绕一大圈到\(fa[i-1]\)又回到这个点的时间
而题目又有限制条件:\(1\leq fa[i]\leq i\),每一项只与前面的某些项有关
所以我们\(\Theta(n)\)递推一遍即可
代码:
#include<bits/stdc++.h>
#define mod 1000000007
#define N 1000005
using namespace std;
int n,a[N];
long long ans[N];
template<class T>inline void read(T &res)
{
char c;T flag=1;
while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;res=c-'0';
while((c=getchar())>='0'&&c<='9')res=res*10+c-'0';res*=flag;
}
int main()
{
read(n);
for(register int i=1;i<=n;++i) read(a[i]);
for(register int i=2;i<=n+1;++i)
ans[i]=((ans[i-1]+1)+(ans[i-1]+1)-ans[a[i-1]])%mod;
printf("%lld\n",(ans[n+1]+mod)%mod);
return 0;
}
原文地址:https://www.cnblogs.com/tqr06/p/11811578.html
- Java面试系列-多线程
- pymongo.errors:Sort operation used more than the maximum 33554432 bytes of RAM. Add an index,
- PG学习初体验--源码安装和简单命令(r8笔记第97天)
- Pymongo: TypeError: if no direction is specified, key_or_list must be an instance of list
- Java面试系列19-Struts2
- JS游戏开发,让你的静态人物动起来(来自网路)
- Golang语言websocket源码
- 社团划分——Fast Unfolding算法
- 【PSU】AIX 11g RAC自动打GI PSU5
- 详解自动识别验证码,LSTM大显身手
- 智能算法——PageRank
- 【Go 语言社区】Golang 可变参数的使用
- 【Go 语言社区】Golang源码解读之map
- 一则报警信息所折射出来的诸多问题(r9笔记第14天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- three.js 着色器材质之纹理
- three.js 制作属于自己的动态二维码
- three.js 制作机房(上)
- three.js 将图片马赛克化
- three.js 数学方法之Box3
- three.js 数学方法之Plane
- three.js 制作机房(下)
- three.js 着色器材质内置变量
- three.js 数学方法之Vector3
- three.js 数学方法之Matrix3
- three.js 对象绕任意轴旋转--模拟门转动
- three.js UV映射简述
- three.js 数学方法之Matrix4
- three.js 利用uv和ThreeBSP制作一个快递柜
- three.js 欧拉角和四元数