vijosP1471 教主的游乐场

来源:互联网 发布:淘宝购物车东西没了 编辑:程序博客网 时间:2024/04/28 03:23
vijosP1471 教主的游乐场

 

链接: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 }

 

0 0
原创粉丝点击