NOIP第二次模拟赛
1.暴走的猴子(walk.pas/c/cpp)
【题目描述】
从前有一个森林,森林里生活着一群猴子,这里猴子有个恶趣味——暴走。现在给你这个森林里的树木描述,你能计算出这只猴子在暴走k步后会蹦达到哪里吗(友情提示:由于你上周帮助猎人写程序打死了猴子父亲,所以今天猴子特别不爽,故意暴走了很多很多步来为难你,从而导致了k非常的大,做好心里准备噢~)
【输入数据】
第一行两个数n,m表示树木数和询问次数
接下来n行,第i行一个数ai表示这只猴子当前在第i棵树的话,下一步会走到第ai棵树
接下来m行,每行两个数t,k,询问如果当前猴子在第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
【时限】
1s
很容易发现图中会有环,所以可以找循环节,这个能得70分
用动规的话能拿100分
http://www.cnblogs.com/oijzh/archive/2012/08/20/2648023.html
2.划分数列(seq.pas/c/cpp)
【题目描述】
给你一个有n个元素的数列,要求把它划分成k段,使每段元素和的最大值最小
【输入格式】
第一行两个正整数n,k
第二行为此数列ai
【输出格式】
一行一个数,为题目所求答案
【样例输入】
5 2
2 1 3 4 5
【样例输出】
9
【数据规模】
30%数据 n <= 30, k <= 10
100%数据 n <= 100000, k <= n, ai <= 10^9
150%数据 n <= 100000, k <= n, |ai| <= 10^9(附:这50分超越了noip难度,大家可以无视)
【时限】
1s
如果只用动规,是O(n3)的时间复杂度,只能拿50分
而这一题类似关押罪犯,可以用二分AC
http://www.cnblogs.com/oijzh/archive/2012/08/20/2648022.html
3.无聊的游戏(boring.pas/c/cpp)
【题目描述】
有一个很无聊的游戏,就是——根据递推公式计算数列
没错,这道题就是这么无聊!
给你数列f(0)=1, f(n)=f(n-1)^2+1 (n > 0)
求出f(n)
(既然题目已经这么无聊了,那就不让大家写高精度了,取个模好了)
【输入格式】
一个整数n
【输出格式】
一行一个整数f(n),结果对1200007取模
【样例输入】
3
【样例输出】
26
【数据规模】
10%数据 1<=n<=10
30%数据 1<=n<=10^6
100%数据 1<=n<=10^9
【时限】
1s
如果你直接按题目暴力能拿30分
这一题部分打表,能得100分
当然也可以找循环节,也能得100分
http://www.cnblogs.com/oijzh/archive/2012/08/20/2648020.html