NOIP2012提高组复赛试题.doc
优质文本全国信息学奥林匹克联赛2017复赛提高组22 1 ·同余方程问题描述求关于的同余方程三1 (句的最小正整数解。输入输入文件为输入只有一行,包含两个正整数用一个空格隔开输出输出文件为输出只有一行,包含一个正整数即最小正整数解。输入数据保证一定有解。输入输出样例. 3 107数据范围对于40的数据,2 L000:对于60的数据,2 50,000,000:对于100的数据,2,2,000,000,000。2 ·借教室 (. )问题描述在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。面对海量租借教室的信息,我们自然希望编程解决这个问题。我们需要处理接下来n天的借教室信息,其中第i天学校有个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为d,斗t,表示某租借者需要从第丬天到第t天租借教室包括第丬天和第t)天,每天需要租借个教室。我们假定,租借者对教室的大小、地点没有要求。即对于每份订单,我们只需要每天提供d个教室,而它们具体是哪些教室,每天是否是相同的教室那么不用考虑。借教室的原那么是先到先得,也就是说我们要按照订单的先后顺序依次为每份订单分配教室。如果在分配的过程中遇到一份订单无法完全满足,那么需要停止教室的分配,通知当前申请人修改订单。这里的无法满足指从第丬天到第t)天中有至少一天剩余的教室数量缺乏d)个。现在我们需要知道,是否会有订单无法完全满足。如果有,需要通知哪一个申请人修改输入输入文件为第一行包含两个正整数n,m,表示天数和订单的数量。第二行包含n个正整数,其中第i个数为,表示第i天可用于租借的教室数量。接下来有m行,每行包含三个正整数,t,表示租借的数量,租借开始、结束分别在第几天。每行相邻的两个数之间均用一个空格隔开。天数与订单均用从1开始的整数编号。输出输出文件为如果所有订单均可满足,那么输出只有一行,包含一个整数0。否那么订单无法完全满足输出两行,第一行输出一个负整数一1 ,第二行输出需要修改订单的申请人编号。输入输出样例01 . 00t2 5 4 32 1 33 2 44 2 42输入输出样例说明第1份订单满足后,4天剩余的教室数分别为0,3,2,3。第2份订单要求第2天到第4天每天提供3个教室,而第3天剩余的教室数为2,因此无法满足。分配停止,通知第2个申请人修改订单。数据范围对于10的数据,有1孓孓10;对于30的数据,有1孓孓1000;对于70的数据,有1孓孓105;对于100的数据,有1孓n,m孓106,0孓,孓109,1 < < < 3 ·疫情控制 (问题描述H国有n个城市,这n个城市用条双向道路相互连通构成一棵树,1号城市是首都,也是树中的根节点。H国的首都爆发了一种危害性极高的传染病。当局为了控制疫清,不让疫情扩散到边境城市叶子节点所表示的城市,决定动用军队在一些城市建立检查点,使得从首都到边境城市的每一条路径上都至少有一个检查点,边境城市也可以建立检查点。但特别要注意的是,首都是不能建立检查点的。现在,在H国的一些城市中已经驻扎有军队,且一个城市可以驻扎多个军队。一支军队可以在有道路连接的城市间移动,并在除首都以外的任意一个城市建立检查点,且只能在一个城市建立检查点。一支军队经过一条道路从一个城市移动到另一个城市所需要的时间等于道路的长度单位:小时。请问最少需要多少个小时才能控制疫情。注意:不同的军队可以同时移动。输入输入文件名为 . 第一行一个整数n,表示城市个数。接下来的n1行,每行3个整数,u、v、w,每两个整数之间用一个空格隔开,表示从城市u到城市v有一条长为w的道路。数据保证输入的是一棵树,且根节点编号为1。接下来一行一个整数m,表示军队个数。接下来一行m个整数,每两个整数之间用一个空格隔开,分别表示这m个军队所驻扎的城市的编号。输出输出文件为b工共一行,包含一个整数,表示控制疫情所需要的最少时间。如果无法控制疫情那么输出1。输入输出样例b工o c i n . 41 2 11 3 23 4 322 23输入输出样例说明第一支军队在2号点设立检查点,第二支军队从2号点移动到3号点设立检查点,所需时间为3个小时。数据范围保证军队不会驻扎在首都。对于20的数据,荃10;对于40的数据,2囟50,()w < 105;对于60的数据,2 n 1000,0<w < 106:对于80的数据,2 n引0,000;对于100的数据,2 n n 50,000,()w < 109全国信息学奥林匹克联赛2017复赛 提高组 1 1è 密码 () 【问题描述】 16 世纪法国外交家 è 设计了一种多表密码加密算法è 密码。è 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。 在密码学中,我们称需要加密的信息为明文,用 M 表示;称加密后的信息为密文,用C 表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为 k。 在 è 密码中,密钥 k 是一个字母串,1k2。当明文 1m2 时,得到的密文 1c2,其中 ®,运算®的规那么如下表所示: ® è 加密在操作时需要注意: 1. ®运算忽略参与运算的字母的大小写,并保持字母在明文 M 中的大小写形式; 2. 当明文 M 的长度大于密钥 k 的长度时,将密钥 k 重复使用。 例如,明文 ,密钥 时,密文 。 明文 H e l l o w o r l d 密钥 a b c a b c a b c a 密文 H f n l p y o s n d 【输入】 输入文件名为 。 输入共 2 行。 第一行为一个字符串,表示密钥 k,长度不超过 100,其中仅包含大小写字母。第二行为一个字符串,表示经加密后的密文,长度不超过 1000,其中仅包含大小写字母。【输出】 输出文件名为 。 输出共 1 行,一个字符串,表示输入密钥和密文所对应的明文。 【输入输出样例】 【数据说明】 对于 100%的数据,输入的密钥的长度不超过 100,输入的密文的长度不超过 1000,且都仅包含英文字母。 3 国王游戏 () 【问题描述】 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的假设干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。 【输入】 输入文件为 。 第一行包含一个整数 n,表示大臣的人数。 第二行包含两个整数 a 和 b,之间用一个空格隔开,分别表示国王左手和右手上的整数。 接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。 【输出】 输出文件名为 。 输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。 【输入输出样例】 3 1 1 2 3 7 4 4 6 2 【输入输出样例说明】按1、2、3号大臣这样排列队伍,获得奖赏最多的大臣所获得金币数为2;按1、3、2这样排列队伍,获得奖赏最多的大臣所获得金币数为2;按2、1、3这样排列队伍,获得奖赏最多的大臣所获得金币数为2;按2、3、1这样排列队伍,获得奖赏最多的大臣所获得金币数为9;按3、1、2这样排列队伍,获得奖赏最多的大臣所获得金币数为2;按3、2、1这样排列队伍,获得奖赏最多的大臣所获得金币数为9。 因此,奖赏最多的大臣最少获得 2 个金币,答案输出 2。 【数据范围】 对于 20%的数据,有 1 n 10,0 < a、b < 8;对于 40%的数据,有 1 n20,0 < a、b < 8; 对于 60%的数据,有 1 n100; 对于 60%的数据,保证答案不超过 109; 对于 100%的数据,有 1 n 1,000,0 < a、b < 10000。 4 开车旅行 () 【问题描述】 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,各个城市的海拔高度互不相同,记城市 i 的海拔高度为 ,城市 i 和城市 j 之间的距离 d恰好是这两个城市海拔高度之差的绝对值,即di, j = |𝐻 𝐻𝑗|。 旅行过程中,小 A 和小 B 轮流开车,第一天小 A 开车,之后每天轮换一次。他们方案选择一个城市 S 作为起点,一直向东行驶,并且最多行驶 X 公里就结束旅行。小 A 和小 B 的驾驶风格不同,小 B 总是沿着前进方向选择一个最近的城市作为目的地,而小 A 总是沿着前进方向选择第二近的城市作为目的地注意:此题中如果当前城市到两个城市的距离相同,那么认为离海拔低的那个城市更近。如果其中任何一人无法按照自己的原那么选择目的城市,或者到达目的地会使行驶的总距离超出 X 公里,他们就会结束旅行。 在启程之前,小 A 想知道两个问题: 1对于一个给定的 0,从哪一个城市出发,小 A 开车行驶的路程总数与小 B 行驶的路程总数的比值最小如果小 B 的行驶路程为 0,此时的比值可视为无穷大,且两个无穷大视为相等。如果从多个城市出发,小 A 开车行驶的路程总数与小 B 行驶的路程总数的比值都最小,那么输出海拔最高的那个城市。 2. 对任意给定的 和出发城市 ,小 A 开车行驶的路程总数以及小 B 行驶的路程总数。 【输入】 输入文件为 。 第一行包含一个整数 N,表示城市的数目。 第二行有 N 个整数,每两个整数之间用一个空格隔开,依次表示城市 1 到城市 N 的海拔高度,即 H1,H2,且每个 都是不同的。 第三行包含一个整数 X0。 第四行为一个整数 M,表示给定 M 组 和 。 接下来的 M 行,每行包含 2 个整数 和 ,表示从城市 出发,最多行驶 公里。 【输出】 输出文件为 。 输出共 1 行。 第一行包含一个整数 S0,表示对于给定的 X0,从编号为 S0 的城市出发,小 A 开车行驶的路程总数与小 B 行驶的路程总数的比值最小。 接下来的 M 行,每行包含 2 个整数,之间用一个空格隔开,依次表示在给定的 和 下小 A 行驶的里程总数和小 B 行驶的里程总数。 【输入输出样例 1】 4 2 3 1 4 3 4 1 3 2 3 3 3 4 3 1 1 1 2 0 0 0 0 0 【输入输出样例 1 说明】 各个城市的海拔高度以及两个城市间的距离如上图所示。 如果从城市 1 出发,可以到达的城市为 2,3,4,这几个城市与城市 1 的距离分别为 1,1,2,但是由于城市 3 的海拔高度低于城市 2,所以我们认为城市 3 离城市 1 最近,城市 2 离城市 1 第二近,所以小 A 会走到城市 2。到达城市 2 后,前面可以到达的城市为 3,4,这两个城市与城市 2 的距离分别为 2,1,所以城市 4 离城市 2 最近,因此小 B 会走到城市 4。到达城市 4 后,前面已没有可到达的城市,所以旅行结束。 如果从城市 2 出发,可以到达的城市为 3,4,这两个城市与城市 2 的距离分别为 2,1,由于城市 3 离城市 2 第二近,所以小 A 会走到城市 3。到达城市 3 后,前面尚未旅行的城市为 4,所以城市 4 离城市 3 最近,但是如果要到达城市 4,那么总路程为 2+3=5>3,所以小 B 会直接在城市 3 结束旅行。 如果从城市 3 出发,可以到达的城市为 4,由于没有离城市 3 第二近的城市,因此旅行还未开始就结束了。 如果从城市 4 出发,没有可以到达的城市,因此旅行还未开始就结束了。 【输入输出样例 2】 10 4 5 6 1 2 3 7 8 9 10 7 10 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 7 10 7 2 3 2 2 4 2 1 2 4 5 1 5 1 2 1 2 0 0 0 0 0 【输入输出样例 2 说明】当 7 时, 如果从城市 1 出发,那么路线为 1 -> 2 -> 3 -> 8 -> 9,小 A 走的距离为 1+2=3,小 B 走的距离为 1+1=2。在城市 1 时,距离小 A 最近的城市是 2 和 6,但是城市 2 的海拔更高,视为与城市 1 第二近的城市,所以小 A 最终选择城市 2;走到 9 后,小 A 只有城市 10 可以走,没有第 2 选择可以选,所以没法做出选择,结束旅行 如果从城市 2 出发,那么路线为 2 -> 6 -> 7 ,小 A 和小 B 走的距离分别为 2,4。如果从城市 3 出发,那么路线为 3 -> 8 -> 9,小 A 和小 B 走的距离分别为 2,1。如果从城市 4 出发,那么路线为 4 -> 6 -> 7,小 A 和小 B 走的距离分别为 2,4。 如果从城市 5 出发,那么路线为 5 -> 7 -> 8 ,小 A 和小 B 走的距离分别为 5,1。如果从城市 6 出发,那么路线为 6 -> 8 -> 9,小 A 和小 B 走的距离分别为 5,1。 如果从城市 7 出发,那么路线为 7 -> 9 -> 10,小 A 和小 B 走的距离分别为 2,1。 如果从城市 8 出发,那么路线为 8 -> 10,小 A 和小 B 走的距离分别为 2,0。 如果从城市 9 出发,那么路线为 9,小 A 和小 B 走的距离分别为 0,0旅行一开始就结束了。 如果从城市 10 出发,那么路线为 10,小 A 和小 B 走的距离分别为 0,0。从城市 2 或者城市 4 出发小 A 行驶的路程总数与小 B 行驶的路程总数的比值都最小,但是城市 2 的海拔更高,所以输出第一行为 2。 【数据范围】对于 30%的数据,有 1N20,1M20;对于 40%的数据,有 1N100,1M100;对于 50%的数据,有 1N100,1M1,000; 对于 70%的数据,有 1N1,000,1M10,000; 对于 100%的数据,有 1N100,000,1M10,000,-1,000,000,0001,000,000,000, 0X01,000,000,000,1N,01,000,000,000,数据保证 互不相同。