全国信息学奥林匹克联赛(NOIP2013)复赛提高组day2第1页共5页CCF全国信息学奥林匹克联赛(NOIP2013)复赛提高组day11.转圈游戏(circle.cpp/c/pas)【问题描述】n个小伙伴(编号从0到n-1)围坐一圈玩游戏。按照顺时针方向给n个位置编号,从0到n-1。最初,第0号小伙伴在第0号位置,第1号小伙伴在第1号位置,……,依此类推。游戏规则如下:每一轮第0号位置上的小伙伴顺时针走到第m号位置,第1号位置小伙伴走到第m+1号位置,……,依此类推,第n−m号位置上的小伙伴走到第0号位置,第n-m+1号位置上的小伙伴走到第1号位置,……,第n-1号位置上的小伙伴顺时针走到第m-1号位置。现在,一共进行了10^k轮,请问x号小伙伴最后走到了第几号位置。【输入】输入文件名为circle.in。输入共1行,包含4个整数n、m、k、x,每两个整数之间用一个空格隔开。【输出】输出文件名为circle.out。输出共1行,包含1个整数,表示10k轮后x号小伙伴所在的位置编号。【输入输出样例】circle.incircle.out103455【数据说明】对于30%的数据,0k7;对于80%的数据,0k107;对于100%的数据,1n1,000,000,0mn,0≤x≤n,0k109。全国信息学奥林匹克联赛(NOIP2013)复赛提高组day2第2页共5页2.火柴排队(match.cpp/c/pas)【问题描述】涵涵有两盒火柴,每盒装有n根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:,其中ai表示第一列火柴中第i个火柴的高度,bi表示第二列火柴中第i个火柴的高度。每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,请输出这个最小交换次数对99,999,997取模的结果。【输入】输入文件为match.in。共三行,第一行包含一个整数n,表示每盒中火柴的数目。第二行有n个整数,每两个整数之间用一个空格隔开,表示第一列火柴的高度。第三行有n个整数,每两个整数之间用一个空格隔开,表示第二列火柴的高度。【输出】输出文件为match.out。输出共一行,包含一个整数,表示最少交换次数对99,999,997取模的结果。【输入输出样例1】match.inmatch.out4231432141【输入输出样例说明】最小距离是0,最少需要交换1次,比如:交换第1列的前2根火柴或者交换第2列的前2根火柴。【输入输出样例2】match.inmatch.out4134217242【输入输出样例说明】最小距离是10,最少需要交换2次,比如:交换第1列的中间2根火柴的位置,再交换第2列中后2根火柴的位置。【数据范围】对于10%的数据,1≤n≤10;对于30%的数据,1≤n≤100;对于60%的数据,1≤n≤1,000;全国信息学奥林匹克联赛(NOIP2013)复赛提高组day2第3页共5页对于100%的数据,1≤n≤100,000,0≤火柴高度≤231−1。3.货车运输(truck.cpp/c/pas)【问题描述】A国有n座城市,编号从1到n,城市之间有m条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有q辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。【输入】输入文件名为truck.in。输入文件第一行有两个用一个空格隔开的整数n,m,表示A国有n座城市和m条道路。接下来m行每行3个整数x、y、z,每两个整数之间用一个空格隔开,表示从x号城市到y号城市有一条限重为z的道路。注意:x不等于y,两座城市之间可能有多条道路。接下来一行有一个整数q,表示有q辆货车需要运货。接下来q行,每行两个整数x、y,之间用一个空格隔开,表示一辆货车需要从x城市运输货物到y城市,注意:x不等于y。【输出】输出文件名为truck.out。输出共有q行,每行一个整数,表示对于每一辆货车,它的最大载重是多少。如果货车不能到达目的地,输出-1。【输入输出样例】truck.intruck.out433124-123333113131413全国信息学奥林匹克联赛(NOIP2013)复赛提高组day2第4页共5页【数据说明】对于30%的数据,0n1,000,0m10,000,0q1,000;对于60%的数据,0n1,000,0m50,000,0q1,000;对于100%的数据,0n10,000,0m50,000,0q30,000,0≤z≤100,000。CCF全国信息学奥林匹克联赛(NOIP2013)复赛1.积木大赛(block.cpp/c/pas)【题目描述】春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是ℎi。在搭建开始之前,没有任何积木(可以看成块高度为0的积木)。接下来每次操作,小朋友们可以选择一段连续区间[L,R],然后将第L块到第R块之间(含第L块和第R块)所有积木的高度分别增加1。小M是个聪明的小朋友,她很快想出了建造大厦的最佳策略,使得建造所需的操作次数最少。但她不是一个勤于动手的孩子,所以想请你帮忙实现这个策略,并求出最少的操作次数。【输入】输入文件为block.in输入包含两行,第一行包含一个整数n,表示大厦的宽度。第二行包含n个整数,第i个整数为ℎi。【输出】输出文件为block.out仅一行,即建造所需的最少操作数。【输入输出样例】block.inblock.out全国信息学奥林匹克联赛(NOIP2013)复赛提高组day2第5页共5页5234125【样例解释】其中一种可行的最佳方案,依次选择[1,5][1,3][2,3][3,3][5,5]【数据范围】对于30%的数据,有1≤n≤10;对于70%的数据,有1≤n≤1000;对于100%的数据,有1≤n≤100000,0≤hi≤10000。2.花匠(flower.cpp/c/pas)【问题描述】花匠栋栋种了一排花,每株花都有自己的高度。花儿越长越大,也越来越挤。栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致。具体而言,栋栋的花的高度可以看成一列整数ℎ1,ℎ2,…,ℎn。设当一部分花被移走后,剩下的花的高度依次为g1,g2,…,gm,则栋栋希望下面两个条件中至少有一个满足:条件A:对于所有的1≤i≤2m,有g2ig2i-1,同时对于所有的1≤i≤2m,有g2ig2i+1;条件B:对于所有的1≤i≤2m,有g2ig2i-1,同时对于所有的1≤i≤2m,有g2ig2i+1。注意上面两个条件在m=1时同时满足,当m1时最多有一个能满足。请问,栋栋最多能将多少株花留在原地。【输入】输入文件为flower.in。输入的第一行包含一个整数,表示开始时花的株数。第二行包含个整数,依次为ℎ1,ℎ2,…,ℎn,表示每株花的高度。【输出】输出文件为flower.out。输出一行,包含一个整数,表示最多能留在原地的花的株数。全国信息学奥林匹克联赛(NOIP2013)复赛提高组day2第6页共5页【输入输出样例】flower.inflower.out5532123【输入输出样例说明】有多种方法可以正好保留3株花,例如,留下第1、4、5株,高度分别为5、1、2,满足条件B。【数据范围】对于20%的数据,n≤10;对于30%的数据,n≤25;对于70%的数据,n≤1000,0≤ℎn≤1000;对于100%的数据,1≤n≤100,000,0≤ℎn≤1,000,000,所有的ℎn随机生成,所有随机数服从某区间内的均匀分布。3.华容道(puzzle.cpp/c/pas)【问题描述】小B最近迷上了华容道,可是他总是要花很长的时间才能完成一次。于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间。小B玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的:1.在一个n*m棋盘上有n*m个格子,其中有且只有一个格子是空白的,其余n*m-1个格子上每个格子上有一个棋子,每个棋子的大小都是1*1的;2.有些棋子是固定的,有些棋子则是可以移动的;3.任何与空白的格子相邻(有公共的边)的格子上的棋子都可以移动到空白格子上。游戏的目的是把某个指定位置可以活动的棋子移动到目标位置。给定一个棋盘,游戏可以玩q次,当然,每次棋盘上固定的格子是不会变的,但是棋盘上空白的格子的初始位置、指定的可移动的棋子的初始位置和目标位置却可能不同。第i次玩的时候,空白的格子在第EXi行第EYi列,指定的可移动棋子的初始位置为第SXi行第SYi列,目标位置为第TXi行第TYi列。全国信息学奥林匹克联赛(NOIP2013)复赛提高组day2第7页共5页假设小B每秒钟能进行一次移动棋子的操作,而其他操作的时间都可以忽略不计。请你告诉小B每一次游戏所需要的最少时间,或者告诉他不可能完成游戏。【输入】输入文件为puzzle.in。第一行有3个整数,每两个整数之间用一个空格隔开,依次表示n、m和q;接下来的n行描述一个n*m的棋盘,每行有m个整数,每两个整数之间用一个空格隔开,每个整数描述棋盘上一个格子的状态,0表示该格子上的棋子是固定的,1表示该格子上的棋子可以移动或者该格子是空白的。接下来的q行,每行包含6个整数依次是EXi、EYi、SXi、SYi、TXi、TYi,每两个整数之间用一个空格隔开,表示每次游戏空白格子的位置,指定棋子的初始位置和目标位置。【输出】输出文件名为puzzle.out。输出有q行,每行包含1个整数,表示每次游戏所需要的最少时间,如果某次游戏无法完成目标则输出−1。【输入输出样例】puzzle.inpuzzle.out3420111011001003212221222322-1【输入输出样例说明】棋盘上划叉的格子是固定的,红色格子是目标位置,圆圈表示棋子,其中绿色圆圈表示目标棋子。1.第一次游戏,空白格子的初始位置是(3,2)(图中空白所示),游戏的目标是将初始位置在(1,2)上的棋子(图中绿色圆圈所代表的棋子)移动到目标位置(2,2)(图中红色的格子)上。移动过程如下:初始状态第一步之后第二步之后2.第二次游戏,空白格子的初始位置是(1,2)(图中空白所示),游戏的目标是将初始位置在(2,2)上的棋子(图中绿色圆圈所示)移动到目标位置(3,2)上。初始状态全国信息学奥林匹克联赛(NOIP2013)复赛提高组day2第8页共5页要将指定块移入目标位置,必须先将空白块移入目标位置,空白块要移动到目标位置,必然是从位置(2,2)上与当前图中目标位置上的棋子交换位置,之后能与空白块交换位置的只有当前图中目标位置上的那个棋子,因此目标棋子永远无法走到它的目标位置,游戏无法完成。【数据范围】对于30%的数据,1≤n,m≤10,q=1;对于60%的数据,1≤n,m≤30,q≤10;对于100%的数据,1≤n,m≤30,q≤500。