NOIP2012提高组复赛试题
- 格式:docx
- 大小:33.86 KB
- 文档页数:13
CCF全国信息学奥林匹克联赛(NOIP2012)复赛提高组 day1(请选手务必仔细阅读本页内容)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU Intel Core2 Quad Q8200 2.33GHz, 内存2G,上述时限以此配置为准。
4、特别提醒:评测在NOI Linux下进行。
1.Vigenère密码(vigenere.cpp/c/pas)【问题描述】16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法——Vigenère密码。
Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。
在密码学中,我们称需要加密的信息为明文,用M表示;称加密后的信息为密文,用C表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为k。
在Vigenère密码中,密钥k是一个字母串,k=k1k2…k n。
当明文M=m1m2…m n时,得到的密文C=c1c2…c n,其中c i=m i®k i,运算®的规则如下表所示:®【输入】输入文件名为vigenere.in。
输入共2行。
第一行为一个字符串,表示密钥k,长度不超过100,其中仅包含大小写字母。
第二行为一个字符串,表示经加密后的密文,长度不超过1000,其中仅包含大小写字母。
【输出】输出文件名为vigenere.out。
输出共1行,一个字符串,表示输入密钥和密文所对应的明文。
对于100%的数据,输入的密钥的长度不超过100,输入的密文的长度不超过1000,且都仅包含英文字母。
2.国王游戏(game.cpp/c/pas)【问题描述】恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏。
NOIP 2012复赛模拟练习卷(一)1.序列(sequence.cpp/c/pas)【问题描述】有一个整数序列,它的每个数各不相同,我们不知道它的长度(即序列中的整数个数)是多少,但我们知道,在某些区间中至少有多少个整数,用区间(Li,Ri,Ci)来描述,表示这个整数序列中至少有Ci个数来自区间[Li,Ri]。
给定若干个这样的区间,问这个整数序列的长度最少能为多少?【输入】(sequence.in)第1行:一个正整数N,表示区间个数。
接下来N行:每行三个正整数Li、Ri和Ci,描述一个区间。
【输出】(sequence.out)输出一个数,表示该整数序列的最小长度。
【输入样例】44 5 16 10 37 10 35 6 1【输出样例】4【数据规模】N<=1000, 0<=Li<=Ri<=1000, 1<=Ci<=Ri-Li+12.call (call.cpp/c/pas)【问题描述】有M座房屋排列在一条直线上。
房屋之间会互相打电话,现在,在一些房屋之间安装了监听器,每当两个位于监听器两侧的房屋之间打了电话,监听器就计一次数。
现在知道每个监听器的位置和计数,问总共最少可能打了多少个电话。
【输入】第一行上有两个整数N和M(N<M≤1000000000),N表示监听器个数,M表示房屋数。
接下来N行,每行两个整数P i和C i,表示第i个监听器位于房屋P i和P i+1之间,计数C i次(0≤Ci ≤100000)。
【输出】一行,一个整数,表示最少可能打了多少个电话。
【样例输入一】3 43 12 2【样例输出一】2【样例输入二】2 31 232 17【样例输出二】23【样例输入三】3 97 28 33 4【样例输出三】53.planting (planting.cpp/c/pas)【问题描述】在一个笛卡尔平面坐标系里(X轴向右是正方向,Y轴向上是正方向),有N(1<=N<=10)个矩形,第i个矩形的左上角坐标是(x1,y1),右下角坐标是(x2,y2)。
第十二届全国信息学奥林匹克分区联赛(NOIP2006)复赛试题(提高组竞赛用时:3小时)关于竞赛中不同语言使用限制的说明一.关于使用Pascal语言与编译结果的说明1.对于Pascal语言的程序,当使用IDE和fpc编译结果不一致时,以fpc的编译结果为准。
2.允许使用数学库(uses math子句),以及ansistring。
但不允许使用编译开关(最后测试时pascal的范围检查开关默认关闭:{$R-,Q-,S-}),也不支持与优化相关的选项。
二.关于C++语言中模板使用的限制说明1.允许使用的部分:标准容器中的布尔集合,迭代器,串,流。
相关的头文件:<bitset > <iterator > <string > <iostream >2.禁止使用的部分:序列:vector,list,deque序列适配器:stack, queue, priority_queue 关联容器:map, multimap, set, multiset 拟容器:valarray 散列容器:hash_map, hash_set, hash_multimap, hash_multiset 所有的标准库算法相关头文件:<vector > <list > <deque > <stack > <map > <set > <algorithm >1.能量项链(energy.pas/c/cpp)【问题描述】在Mars星球上,每个Mars人都随身佩带着一串能量项链。
在项链上有N颗能量珠。
能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。
并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。
因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。
NOI’ 95“同创杯”全国青少年信息学(计算机)奥林匹克竞赛分区联赛复赛试题(高中组)(上机编程,完成时间:210 分钟)<1>编码问题:设有一个数组A:ARRAY[0..N-1] OF INTEGER;数组中存放的元素为0~N-1 之间的整数,且A[i]≠ A[j](当i≠ j时)。
例如: N=6 时,有:此时,数组 A 的编码定义如下:A[0] 的编码为0;A[i] 的编码为:在A[0] ,A[1]∴上面数组 A 的编码为:A= ( 4,3, 0, 5,1, 2),, A[i-1] 中比 A[i] 的值小的个数(B= (0, 0,0,3,1, 2)i=1 ,2,, N-1 )程序要求解决以下问题:①给出数组 A 后,求出其编码。
②给出数组 A 的编码后,求出 A 中的原数据。
<2> 灯的排列问题:设在一排上有 N 个格子( N≤ 20),若在格子中放置有不同颜色的灯,每种灯的个数记为 N 1, N2, N k( k 表示不同颜色灯的个数)。
放灯时要遵守下列规则:①同一种颜色的灯不能分开;②不同颜色的灯之间至少要有一个空位置。
例如: N=8 (格子数)R=2 (红灯数)B=3 (蓝灯数)放置的方法有:R-B 顺序R R B B BR R B B BR R B B BR R B B BR R B B BR R B B BB-R顺序B B B BBBBBBBBBBBBBBR RRRBRRRRRRRR放置的总数为12 种。
数据输入的方式为:NP1(颜色,为一个字母)P2N1(灯的数量)N2Q(结束标记, Q 本身不是灯的颜色)程序要求:求出一种顺序的排列方案及排列总数。
<3> 设有一个四层的积木块,1~ 4 层积木块的数量依次为:5, 6,7, 8如下图所示放置:815851691423414326其中,给出第三层与第四层所标示的数字,并已知第三层的数据是由第四层的数据计算出来的。
CCF 全国信息学奥林匹克联赛(NOIP2012)复赛普及组(请选手务必仔细阅读本页内容)一.题目概况注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU Intel Core2 Quad Q8200 2.33GHz,内存2G,上述时限以此配置为准。
4、特别提醒:评测在NOI Linux 下进行。
【问题描述】1.质因数分解(prime.cpp/c/pas)已知正整数n 是两个不同的质数的乘积,试求出较大的那个质数。
【输入】输入文件名为prime.in。
输入只有一行,包含一个正整数n。
【输出】输出文件名为prime.out。
输出只有一行,包含一个正整数p,即较大的那个质数。
【输入输出样例】【数据范围】对于60%的数据,6 ≤ n≤ 1000。
对于100%的数据,6 ≤n ≤ 2*109。
【问题描述】2.寻宝(treasure.cpp/c/pas)传说很遥远的藏宝楼顶层藏着诱人的宝藏。
小明历尽千辛万苦终于找到传说中的这个藏宝楼,藏宝楼的门口竖着一个木板,上面写有几个大字:寻宝说明书。
说明书的内容如下:藏宝楼共有N+1 层,最上面一层是顶层,顶层有一个房间里面藏着宝藏。
除了顶层外,藏宝楼另有N 层,每层M 个房间,这M 个房间围成一圈并按逆时针方向依次编号为0,…,M-1。
其中一些房间有通往上一层的楼梯,每层楼的楼梯设计可能不同。
每个房间里有一个指示牌,指示牌上有一个数字x,表示从这个房间开始按逆时针方向选择第x 个有楼梯的房间(假定该房间的编号为k),从该房间上楼,上楼后到达上一层的k 号房间。
比如当前房间的指示牌上写着2,则按逆时针方向开始尝试,找到第2 个有楼梯的房间,从该房间上楼。
如果当前房间本身就有楼梯通向上层,该房间作为第一个有楼梯的房间。
寻宝说明书的最后用红色大号字体写着:“寻宝须知:帮助你找到每层上楼房间的指示牌上的数字(即每层第一个进入的房间内指示牌上的数字)总和为打开宝箱的密钥”。
Day1铺地毯【问题描述】为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。
一共有n 张地毯,编号从1 到n。
现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。
地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。
注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。
【输入】输入文件名为 carpet.in。
输入共 n+2 行。
第一行,一个整数 n,表示总共有n 张地毯。
接下来的 n 行中,第i+1 行表示编号i 的地毯的信息,包含四个正整数a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标(a,b)以及地毯在x轴和y 轴方向的长度。
第 n+2 行包含两个正整数x 和y,表示所求的地面的点的坐标(x,y)。
【输出】输出文件名为 carpet.out。
输出共 1 行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1。
【输入输出样例 1】【输入输出样例说明】如下图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,覆盖点(2,2)的最上面一张地毯是3 号地毯。
【输入输出样例 2】【输入输出样例说明】如上图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,点(4,5)没有被地毯覆盖,所以输出-1。
【数据范围】对于 30%的数据,有n≤2;对于 50%的数据,0≤a, b, g, k≤100;对于 100%的数据,有0≤n≤10,000,0≤a, b, g, k≤100,000。
【一句话题意】给定n个按顺序覆盖的矩形,求某个点最上方的矩形编号。
【考察知识点】枚举【思路】好吧我承认看到图片的一瞬间想到过二维树状数组和二维线段树。
置答案ans=-1,按顺序枚举所有矩形,如果点在矩形内则更新ans。
注意题中给出的不是对角坐标,实际上是(a,b)与(a+g,b+k)。
CCF全国信息学奥林匹克联赛(NmP2012)复赛提高组day22. 1 ·同余方程〖问题描述〗求关于的同余方程三1 (mod句的最小正整数解。
输入〗输入文件为mod.ino输入只有一行,包含两个正整数用一个空格隔开输出〗输出文件为mod.outo输出只有一行,包含一个正整数№即最小正整数解。
输入数据保证一定有解。
〖输入输出样例〗对于40%的数据,2 L000:对于60%的数据,2 50,000,000:对于100%的数据,2,2,000,000,000。
2 ·借教室 (classroom. cpp/c/pas)问题描述〗在大学期间,经常需要租借教室。
大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。
教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。
面对海量租借教室的信息,我们自然希望编程解决这个问题。
我们需要处理接下来n天的借教室信息,其中第i天学校有个教室可供租借。
共有m份订单,每份订单用三个正整数描述,分别为d],斗t},表示某租借者需要从第丬天到第t]天租借教室(包括第丬天和第t)天),每天需要租借dj个教室。
我们假定,租借者对教室的大小、地点没有要求。
即对于每份订单,我们只需要每天提供d]个教室,而它们具体是哪些教室,每天是否是相同的教室则不用考虑。
借教室的原则是先到先得,也就是说我们要按照订单的先后顺序依次为每份订单分配教室。
如果在分配的过程中遇到一份订单无法完全满足,则需要停止教室的分配,通知当前申请人修改订单。
这里的无法满足指从第丬天到第t)天中有至少一天剩余的教室数量不足d)个。
现在我们需要知道,是否会有订单无法完全满足。
如果有,需要通知哪一个申请人修改输入〗输入文件为classroom.in第一行包含两个正整数n,m,表示天数和订单的数量。
第二行包含n个正整数,其中第i个数为ri,表示第i天可用于租借的教室数量。
接下来有m行,每行包含三个正整数dJ,s],t],表示租借的数量,租借开始、结束分别在第几天。
NOIP 2012复赛模拟练习卷(一)1.序列(sequence.cpp/c/pas)【问题描述】有一个整数序列,它的每个数各不相同,我们不知道它的长度(即序列中的整数个数)是多少,但我们知道,在某些区间中至少有多少个整数,用区间(Li,Ri,Ci)来描述,表示这个整数序列中至少有Ci个数来自区间[Li,Ri]。
给定若干个这样的区间,问这个整数序列的长度最少能为多少?【输入】(sequence.in)第1行:一个正整数N,表示区间个数。
接下来N行:每行三个正整数Li、Ri和Ci,描述一个区间。
【输出】(sequence.out)输出一个数,表示该整数序列的最小长度。
【输入样例】44 5 16 10 37 10 35 6 1【输出样例】4【数据规模】N<=1000, 0<=Li<=Ri<=1000, 1<=Ci<=Ri-Li+12.call (call.cpp/c/pas)【问题描述】有M座房屋排列在一条直线上。
房屋之间会互相打电话,现在,在一些房屋之间安装了监听器,每当两个位于监听器两侧的房屋之间打了电话,监听器就计一次数。
现在知道每个监听器的位置和计数,问总共最少可能打了多少个电话。
【输入】第一行上有两个整数N和M(N<M≤1000000000),N表示监听器个数,M表示房屋数。
接下来N行,每行两个整数P i和C i,表示第i个监听器位于房屋P i和P i+1之间,计数C i次(0≤Ci ≤100000)。
【输出】一行,一个整数,表示最少可能打了多少个电话。
【样例输入一】3 43 12 2【样例输出一】2【样例输入二】2 31 232 17【样例输出二】23【样例输入三】3 97 28 33 4【样例输出三】53.planting (planting.cpp/c/pas)【问题描述】在一个笛卡尔平面坐标系里(X轴向右是正方向,Y轴向上是正方向),有N(1<=N<=10)个矩形,第i个矩形的左上角坐标是(x1,y1),右下角坐标是(x2,y2)。
day1 T1:Vigenère 密码(vigenere.cpp/c/pas)【问题描述】16世纪法国外交家Blaise de Vigenère 设计了一种多表密码加密算法——Vigenère 密码。
Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。
在密码学中,我们称需要加密的信息为明文,用M 表示;称加密后的信息为密文,用C 表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为k 。
在Vigenère 密码中,密钥k 是一个字母串,k=k 1k 2…k n 。
当明文M=m 1m 2…m n 时,得到的密文C=c 1c 2…c n ,其中c i =m i ®k i ,运算®的规则如下表所示:【输入】输入文件名为vigenere.in 。
输入共2行。
第一行为一个字符串,表示密钥k ,长度不超过100,其中仅包含大小写字母。
第二行为一个字符串,表示经加密后的密文,长度不超过1000,其中仅包含大小写字母。
®【输出】输出文件名为vigenere.out。
输出共1行,一个字符串,表示输入密钥和密文所对应的明文。
对于100%的数据,输入的密钥的长度不超过100,输入的密文的长度不超过1000,且都仅包含英文字母。
day1 T2:国王游戏(game.cpp/c/pas)【问题描述】恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏。
首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。
然后,让这n位大臣排成一排,国王站在队伍的最前面。
排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。
国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。
第十届全国信息学奥林匹克分区联赛(NOIP2004)复赛试题(提高组竞赛用时:3小时)1、津津的储蓄计划(Save.pas/dpr/c/cpp)【问题描述】津津的零花钱一直都是自己管理。
每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。
为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。
因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。
例如11月初津津手中还有83元,妈妈给了津津300元。
津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。
到了11月月末,津津手中会剩下3元钱。
津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。
有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。
如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。
现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。
如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。
【输入文件】输入文件save.in包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。
【输出文件】输出文件save.out包括一行,这一行只包含一个整数。
如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。
【样例输入1】29023028020030017034050908020060【样例输出1】-7【样例输入2】29023028020030017033050908020060【样例输出2】1580【问题描述】在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。
第十八届全国青少年信息学奥林匹克联赛初赛(提高组Pascal语言试题)一、单项选择题(共10题,每题1.5分,共计15分;每题有且仅有一个正确选项)1.目前计算机芯片(集成电路)制造的主要原料是(),它是一种可以在沙子中提炼出的物质。
A.硅B.铜C.锗D.铝2.()是主要用于显示网页服务器或者文件系统的HTML文件的内容,并让用户与这些文件交互的一种软件。
A.资源管理器B.浏览器C.电子邮件D.编译器3.目前个人电脑的()市场占有率最靠前的厂商包括Intel、AMD等公司。
A.显示器B.CPU C.内存D.鼠标4.无论是TCP/IP模型还是OSI模型,都可以视为网络的分层模型,每个网络协议都会被归入某一层中。
如果用现实生活中的例子来比喻这些“层”,以下最恰当的是()。
A.中国公司的经理与斯洛伐克公司的经理交互商业文件B.军队发布命令C.国际会议中,每个人都与他国地位对等的人直接进行会谈D.体育比赛中,每一级比赛的优胜者晋级上一级比赛5.如里不在快速排序中引入随机化,有可能导致的后果是()。
A.数组访问越界B.陷入死循环C.排序结果错误D.排序时间退化为平方级6.1946年诞生于美国宾夕法尼亚大学的ENIAC属于()计算机。
A.电子管B.晶体管C.集成电路D.超大规模集成电路7.在程序运行过程中,如果递归调用的层数过多,会因为()引发错误。
A.系统分配的栈空间溢出B.系统分配的堆空间溢出C .系统分配的队列空间溢出D .系统分配的链表空间溢出8.地址总线的位数决定了CPU 可直接寻址的内存空间大小,例如地址总线为16位,其最大的可寻址空间为64KB 。
如果地址总线是32位,则理论上最大可寻址的内存空间为( )。
A .128KBB .1MBC .1GBD .4GB9.以下不属于3G (第三代移动通信技术)标准的是( )。
A .GSMB .TD-SCDMAC .CDMA2000D .WCDMA10.仿生学的问世开辟了独特的科学技术发展道路。
全国信息学奥林匹克联赛(2012)复赛提高组22 . 1 •同余方程〖问题描述〗求关于的同余方程三1 (句的最小正整数解。
【输入〗输入文件为输入只有一行,包含两个正整数用一个空格隔开【输出〗输出文件为输出只有一行,包含一个正整数血即最小正整数解。
输入数据保证一定有解。
『输入输出样例〗『数据范围〗对于40%的数据,2L000:对于60%的数据,2 50 , 000, 000:对于100%的数据,2, 2, 000, 000, 0002 •借教室(.)【问题描述〗在大学期间,经常需要租借教室。
大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。
教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。
面对海量租借教室的信息,我们自然希望编程解决这个问题。
我们需要处理接下来n天的借教室信息,其中第i天学校有个教室可供租借。
共有m份订单,每份订单用三个正整数描述,分别为d],斗t},表示某租借者需要从第丬天到第t]天租借教室(包括第丬天和第t)天),每天需要租借个教室。
我们假定,租借者对教室的大小、地点没有要求。
即对于每份订单,我们只需要每天提供d]个教室,而它们具体是哪些教室,每天是否是相同的教室则不用考虑。
借教室的原则是先到先得,也就是说我们要按照订单的先后顺序依次为每份订单分配教室。
如果在分配的过程中遇到一份订单无法完全满足,则需要停止教室的分配,通知当前申请人修改订单。
这里的无法满足指从第丬天到第t)天中有至少一天剩余的教室数量不足d)个。
现在我们需要知道,是否会有订单无法完全满足。
如果有,需要通知哪一个申请人修改输入〗输入文件为第一行包含两个正整数n,m,表示天数和订单的数量。
第二行包含n个正整数,其中第i个数为,表示第i天可用于租借的教室数量。
接下来有m行,每行包含三个正整数],t],表示租借的数量,租借开始、结束分别在第几天。
每行相邻的两个数之间均用一个空格隔开。
天数与订单均用从1开始的整数编号。
〖输出〗输出文件为如果所有订单均可满足,则输出只有一行,包含一个整数Oc 否则(订单无法完全满足)输出两行,第一行输出一个负整数一1,第二行输出需要修改订单的申请人编号。
〖输入输出样例〗1 33 2 44 2 4【输入输出样例说明〗第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,表示城市个数。
接下来的n. 1行,每行3个整数,u、v、w,每两个整数之间用一个空格隔开,表示从城市u到城市v有一条长为w的道路。
数据保证输入的是一棵树,且根节点编号为1。
接下来一行一个整数m表示军队个数。
接下来一行m个整数,每两个整数之间用一个空格隔开,分别表示这m个军队所驻扎的城市的编号。
〖输出〗输出文件为b工共一行,包含一个整数,表示控制疫情所需要的最少时间。
如果无法控制疫情则输出.1。
『输入输出样例〗【输入输出样例说明〗第一支军队在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全国信息学奥林匹克联赛(2012)复赛提高组11. e密码()【问题描述】16世纪法国外交家e设计了一种多表密码加密算法------- e密码。
e密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。
在密码学中,我们称需要加密的信息为明文,用M表示;称加密后的信息为C表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为k。
在e密码中,密钥k 是一个字母串,山2…。
当明文?的规则如下表所示:1m2…时,得到的密文1C2…,其中?,运算e加密在操作时需要注意:1. ?运算忽略参与运算的字母的大小写,并保持字母在明文M中的大小写形式;2. 当明文M的长度大于密钥k的长度时,将密钥k重复使用。
例如,明文,密钥时,密文【输入】输入文件名为。
输入共2行。
第一行为一个字符串,表示密钥k,长度不超过100,其中仅包含大小写字母。
第二行为一个字符串,表示经加密后的密文,长度不超过1000,其中仅包含大小写字母。
【输出】输出文件名为输出共1行,一个字符串,表示输入密钥和密文所对应的明文。
【输入输出样例】【数据说明】对于100%的数据,输入的密钥的长度不超过100,输入的密文的长度不超过1000,且都仅包含英文字母。
3. 国王游戏()【问题描述】恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏。
首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。
然后,让这n位大臣排成一排,国王站在队伍的最前面。
排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。
国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。
注意,国王的位置始终在队伍的最前面。
【输入】输入文件为。
第一行包含一个整数n,表示大臣的人数。
第二行包含两个整数a和b,之间用一个空格隔开,分别表示国王左手和右手上的整数。
接下来n行,每行包含两个整数a和b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。
【输出】输出文件名为。
输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。
【输入输出样例】【输入输出样例说明】按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%的数据,有K n < 10 ,0 < a、b < 8 ;对于40%的数据,有K n < 20, 0 < a、b < 8 ;对于60%的数据,有K n < 100;对于60%的数据,保证答案不超过10 9;对于100%的数据,有1 < n < 1,000 , 0 < a、b < 100004 .开车旅行()【问题描述】小A 和小B 决定利用假期外出旅行,他们将想去的城市从1 到N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市i 的海拔高度为,城市i 和城市j 之间的距离d[] 恰好是这两个城市海拔高度之差的绝对值,即d[i, 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至U城市N的海拔高度,即H i,也……,,且每个都是不同的。
第三行包含一个整数X o。
第四行为一个整数M,表示给定M组和。
接下来的M行,每行包含2个整数和,表示从城市出发,最多行驶公里。
【输出】输出文件为。
输出共1行。
第一行包含一个整数S o,表示对于给定的X o,从编号为S o的城市出发,小A开车行驶的路程总数与小B行驶的路程总数的比值最小。
接下来的M行,每行包含2个整数,之间用一个空格隔开,依次表示在给定的和下小A行驶的里程总数和小B行驶的里程总数。
【输入输出样例1】【输入输出样例说明】Hl=2 H2=3 H3 = l H4=4各个城市的海拔高度以及两个城市间的距离如上图所示。
如果从城市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。