zoukankan      html  css  js  c++  java
  • 滑板鞋(倍增)

    题2:滑板鞋(walk.cpp/ walk.in/ walk.out)

    背景

    我的滑板鞋时尚时尚最时尚
    回家的路上我情不自禁
    摩擦 摩擦
    在这光滑的地上摩擦
    月光下我看到自己的身影有时很远有时很近
    感到一种力量驱使我的脚步
    有了滑板鞋天黑都不怕

    描述

    你在魅力之都购买了一双时尚的滑板鞋,你非常兴奋地到处摩擦!
    宁宁很想问一个问题:按照你的行动方式,你从某个结点摩擦(移动)K步后能到的目的地。
    这显然是一个很简单的问题,但是蒟蒻宁宁总是问个不停,所以你决定写一个程序回答他的询问。

    输入格式

    第一行两个数n,m表示结点个数和询问次数
    接下来n行,第i个数一个数a[i]表示你在第i个结点的话,下一步会移动到第a[i]个结点
    接下来m行,每行两个数t,k,蒟蒻hzwer询问如果你当前在第t个结点,k步之后你会到第几个节点

    输出格式

    m行为每次询问的结果

    输入样例

    3 2
    2
    3
    2
    1 2
    2 4

    输出样例

    3
    2

    备注

    共十个测试点,每个测试点数据规模如下所示
    1.n=102,m=n,k<=102
    2.n=103,m=n,k<=103
    3.n=104,m=1,k<=109
    4.n=105,m=1,k<=109
    5.n=105,m=1,k<=1012
    6.n=105,m=1,k<=1015
    7.n=105,m=1,k<=1018
    8.n=105,m=n,k<=1012
    9.n=105,m=n,k<=1015
    10.n=105,m=n,k<=1018

    #include<cstdio>
    #include<cmath>
    #define int long long
    using namespace std;
    
    inline void input(int &x){
    	int ans=0,f=1;
    	char c=getchar();
    	while(c<'0'||c>'9'){
    		if(c=='-')f=-1;
    		c=getchar();
    	}
    	while(c>='0'&&c<='9'){
    		ans=ans*10+c-'0';
    		c=getchar();
    	}
    	x=ans*f;
    }
    
    inline void output(int x){
    	if(x<0)putchar('-'),x=-x;
    	if(x>9)output(x/10);
    	putchar(x%10+'0');
    }
    
    inline void writeln(int x){
    	output(x);
    	putchar('
    ');
    }
    
    int n,m,a[100005],f[100005][65],bin[65];
    
    signed main(){
    	freopen("walk.in","r",stdin);
    	freopen("walk.out","w",stdout);
    	input(n);input(m);
    	for(int i=1;i<=n;i++){
    		input(a[i]);
    		f[i][0]=a[i];
    	}bin[0]=1;
    	for(int i=1;i<=62;i++){
    		bin[i]=bin[i-1]<<1;
    		for(int j=1;j<=n;j++){
    			f[j][i]=f[f[j][i-1]][i-1];
    		}
    	}
    	while(m--){
    		int t,k,ans=0;
    		input(t);input(k);
    		for(int i=62;i>=0;i--){
    			if(k&bin[i])t=f[t][i];
    		}
    		writeln(t);
    	}
    }
    

    注意 : 1.注意用k&bin[i]位运算的方式判位
    2.用bin存1<<i,不然太大了弄不出来
    3.用longlong要开到62(263-1),int到30(231-1),unsignedlonglong到63(2^64-1)

  • 相关阅读:
    移动端尺寸基础知识
    flex
    Viewport
    移动端Web开发技巧
    vue项目中,Iview打包到生产环境时, woff 字体引用问题
    【读书笔记】iOS-垃圾回收
    【读书笔记】iOS-Coco内存管理规则-拥有对象
    【读书笔记】iOS-自动释放池
    【读书笔记】iOS-引用计数
    【读书笔记】iOS-装箱
  • 原文地址:https://www.cnblogs.com/Y15BeTa/p/11293794.html
Copyright © 2011-2022 走看看