博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
滑板鞋(倍增)
阅读量:5214 次
发布时间:2019-06-14

本文共 1819 字,大约阅读时间需要 6 分钟。

题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=10^2,m=n,k<=10^2
2.n=10^3,m=n,k<=10^3
3.n=10^4,m=1,k<=10^9
4.n=10^5,m=1,k<=10^9
5.n=10^5,m=1,k<=10^12
6.n=10^5,m=1,k<=10^15
7.n=10^5,m=1,k<=10^18
8.n=10^5,m=n,k<=10^12
9.n=10^5,m=n,k<=10^15
10.n=10^5,m=n,k<=10^18

#include
#include
#define int long longusing 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('\n');}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(2^63-1),int到30(2^31-1),unsignedlonglong到63(2^64-1)

转载于:https://www.cnblogs.com/Y15BeTa/p/11293794.html

你可能感兴趣的文章
20190422 T-SQL 触发器
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
poj1422_有向图最小路径覆盖数
查看>>
BootScrap
查看>>
[大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
查看>>
WEB_点击一百万次
查看>>
CodeForces - 878A Short Program(位运算)
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
Mysql出现(10061)错误提示的暴力解决办法
查看>>
2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
查看>>
NPM慢怎么办 - nrm切换资源镜像
查看>>
CoreData 从入门到精通(四)并发操作
查看>>
Swift - UIView的常用属性和常用方法总结
查看>>
Swift - 异步加载各网站的favicon图标,并在单元格中显示
查看>>
Java编程思想总结笔记Chapter 5
查看>>
[LeetCode]662. Maximum Width of Binary Tree判断树的宽度
查看>>
WinForm聊天室
查看>>
Python 从零学起(纯基础) 笔记(一)
查看>>
【Python学习笔记】1.基础知识
查看>>
梦断代码阅读笔记02
查看>>