vijosP1471 教主的游乐场
2016-03-30 17:27
253 查看
vijosP1471 教主的游乐场
链接:https://vijos.org/p/1471
【思路】
递推。
首先找到最左边的可以一步跳到后方的L,
那么L之后的点有两种情况:要么a足以跳到后方步数为1,要么可以一步调到L有L跳到后方步数为2。
对于L之前的点而言,再进行相同的操作,相当于代码中缩小R为L。
【代码】
链接:https://vijos.org/p/1471
【思路】
递推。
首先找到最左边的可以一步跳到后方的L,
那么L之后的点有两种情况:要么a足以跳到后方步数为1,要么可以一步调到L有L跳到后方步数为2。
对于L之前的点而言,再进行相同的操作,相当于代码中缩小R为L。
【代码】
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 const int maxn = 100000+10; 6 7 int n,q; 8 int a[maxn],step[maxn]; 9 10 inline int read_int(){ 11 char c=getchar(); 12 while(!isdigit(c)) c=getchar(); 13 int x=0; 14 while(isdigit(c)) { 15 x=x*10+c-'0'; 16 c=getchar(); 17 } 18 return x; 19 } 20 21 int main() { 22 ios::sync_with_stdio(false); 23 n=read_int(); q=read_int(); 24 for(int i=1;i<=n;i++) a[i]=read_int(); 25 26 int L=1,R=n+1; 27 step[R]=0; 28 do{ 29 int i=1; 30 while(i+a[i]<R) i++; 31 for(int j=i;j<R;j++) 32 if(j+a[j]>=R) step[j]=step[R]+1; 33 else step[j]=step[R]+2; 34 R=i; 35 }while(R>1); 36 int x; 37 for(int i=1;i<=q;i++) { 38 x=read_int(); 39 cout<<step[x]; 40 if(i<q) cout<<" "; 41 else 42 cout<<"\n"; 43 } 44 return 0; 45 }
相关文章推荐
- vijosP1059 积木城堡
- vijosP1071 新年趣事之打牌
- vijosP1285 佳佳的魔法药水
- vijosP1014 旅行商简化版
- NOI题库7624 山区建小学(162:Post Office / IOI2000 POST OFFICE [input] )
- NOI题库05 派
- 洛谷1144 最短路计数
- 洛谷1265 公路修建
- 洛谷1339 热浪(最短路模板)
- 洛谷1341 无序字母对
- 洛谷1462 通往奥格瑞玛的道路
- 洛谷1828 香甜的黄油
- 洛谷1119 灾后重建
- UVa11090 Going in Cycle!!
- WinPcap权威指南(一)
- 限制UITextField手机号只能输入11位
- ubuntu下MySQLdb模块安装
- 非阻塞型算法
- 软件测试Exercise Section 2.3 第七题
- leetCode之旅(12)-反转二叉树