zoukankan      html  css  js  c++  java
  • 弹飞DZY(思维,打表,还没过全,先放着)

    弹飞DZY
    Description
    某天,机智的ZZC发明了一种超级弹力装置,为了在他的朋友DZY面前显摆,他邀请DZY一起玩个游戏。游戏一开始,ZZC在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当DZY达到第i个装置时,他会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则DZY被弹飞。智商为10的DZY想知道当他从第i个装置起步时,被弹几次后会被弹飞。为了使得游戏更有趣,ZZC可以修改某个弹力装置的弹力系数,任何时候弹力系数均为正整数。
    Input
    第一行包含一个整数n,表示地上有n个装置,装置的编号从0到n-1,接下来一行有n个正整数,依次为那n个装置的初始弹力系数。第三行有一个正整数m,接下来m行每行至少有两个数i、j,若i=1,你要输出从j出发被弹几次后被弹飞,若i=2则还会再输入一个正整数k,表示第j个弹力装置的系数被修改成k。对于20%的数据n,m<=10000,对于100%的数据n<=200000,m<=100000
    Output
    对于每个i=1的情况,你都要输出一个需要的步数,占一行。
    Sample Input
    4
    1 2 1 1
    3
    1 1
    2 1 1
    1 1
    Sample Output
    2
    3

    题解:数据很大,想着打个表,根据改变的数,改变表中的值,temp=temp+p[temp]根据temp推不出前面一个的值;就这点暴力了,但是没什么用,还是wa了一部分数据;想着用一个vector数组保存可以到达temp的所有前一个位置,但是每一个都有好多前一个位置,只能递归了,好复杂,还是这样扔着吧,这题得80多分,证明有一部分数据很大;

    wa代码:

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int INF=0x3f3f3f3f;
    #define SI(x) scanf("%d",&x)
    #define SL(x) scanf("%lld",&x)
    #define PI(x) printf("%d",x)
    #define PL(x) printf("%lld",x)
    #define mem(x,y) memset(x,y,sizeof(x))
    #define P_ printf(" ")
    typedef long long LL;
    const int MAXN=200010;
    int p[MAXN];
    int dp[MAXN];
    int main(){
    	int n,m,k;
    	while(~SI(n)){
    		for(int i=0;i<n;i++){
    			SI(p[i]);
    		}
    		for(int i=0;i<n;i++){
    			int x=0,temp=i;
    			while(temp<n){
    				temp=temp+p[temp];
    				x++;
    			}
    			dp[i]=x;
    		}
    		SI(m);
    		int a,b,c;
    		while(m--){
    			SI(a);SI(b);
    			if(a==1)printf("%d
    ",dp[b]);
    			else{
    				SI(c);
    				int x=0,temp=b,last;
    				last=p[b];
    				p[b]=c;
    				while(temp<n){
    					temp=temp+p[temp];
    					x++;
    				}
    				dp[b]=x;
    				for(int i=0;i<=b;i++){
    					x=0,temp=i;
    					while(temp<=b){
    					temp=temp+p[temp];
    					x++;
    						if(temp==b)dp[i]=x+dp[b];
    					}
    				}
    			}
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    Win10家庭版、专业版、企业版、教育版各版本功能区别对照表
    BaseDAL最牛数据层基类2
    C# 获得目录下所有文件或指定文件类型文件(包含所有子文件夹)
    IIS下众多网站,如何快速定位某站点日志在哪个文件夹?
    【进阶技术】一篇文章搞掂:OAuth2
    【进阶技术】一篇文章搞掂:RibbitMQ
    【系统架构理论】一篇文章搞掂:设计模式
    【前端技术】一篇文章搞掂:WeX5
    【c#技术】一篇文章搞掂:Newtonsoft.Json Json.Net
    【Java架构:持续交付】一篇文章搞掂:Jenkins
  • 原文地址:https://www.cnblogs.com/handsomecui/p/5175749.html
Copyright © 2011-2022 走看看