万卷网> 考级竞赛> 信息学奥赛> NOIP普及组

NOIP普及组

更新时间: 2023-08-26 20:36:18  试题数量: 535 

题库预览
简答题 求和【问题描述】一条狭长的纸带被均匀划分出了 n 个格子,格子编号从 1 到 n。每个格子上都染了一种颜色colori(用[1,m]当中的一个整数表示),并且写了一个数字numberi。定义一种特殊的三元组:(x, y, z),其中 x,y,z 都代表纸带上格子的编号,这里的三元组要求满足以下两个条件:x,y,z,都是整数, x< y < z, y − x = z − ycolorx =colorz满足上述条件的三元组的分数规定为(x + z) * (numberx +numberz)。整个纸带的分数规定为所有满足条件的三元组的分数的和。这个分数可能会很大,你只要输出整个纸带的分数除以 10,007 所得的余数即可。【输入格式】输入文件名为 sum.in。第一行是用一个空格隔开的两个正整数n和m,n代表纸带上格子的个数,m代表纸带上颜色的种类数。第二行有n个用空格隔开的正整数,第i个数字numberi代表纸带上编号为i的格子上面写的数字。第三行有n个用空格隔开的正整数,第i个数字colori代表纸带上编号为i的格子染的颜色。【输出格式】输出文件名为 sum.out。共一行,一个整数,表示所求的纸带分数除以 10,007 所得的余数。【输入输出样例 1】【输入输出样例 1 说明】纸带如题目描述中的图所示。所有满足条件的三元组为:(1, 3, 5), (4, 5, 6)。所以纸带的分数为(1 + 5) *(5 + 2) + (4 + 6) * (2 + 2) = 42 + 40 = 82。【输入输出样例 2】【数据说明】对于第 1 组至第 2 组数据,1 ≤ n ≤ 100, 1 ≤ m ≤ 5;对于第 3 组至第 4 组数据,1 ≤ n ≤ 3000, 1 ≤ m ≤ 100;对于第 5 组至第 6 组数据,1 ≤ n ≤ 100000, 1 ≤ m ≤ 100000,且不存在出现次数超过 20 的颜色;对于全部 10 组 数 据 , 1 ≤ n ≤ 100000, 1 ≤m ≤ 100000, 1 ≤colori ≤ m, 1 ≤numberi ≤ 100000。
简答题 回文日期 (date)【问题描述】在日常生活中,通过年、月、 日这三个要素可以表示出一个唯一确定的日期。牛牛习惯用 8 位数字表示一个日期,其中,前 4 位代表年份,接下来 2 位代表月 份,最后 2 位代表日期。 显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同。牛牛认为,一个日期是回文的,当且仅当表示这个日期的 8 位数字是回文的。现 在,牛牛想知道:在他指定的两个日期之间 (包含这两个日期本身),有多少个真实存 在的日期是回文的。【提示】一个8位数字是回文的,当且仅当对于所有的 i 从左向右数的第 i 个 数字和第 9 - i 个数字 (即从右向左数的第i 个数字) 是相同的。例如:● 对于 2016 年 11 月 19 日,用8位数字 20161119 表示,它不是回文的。● 对于 2010 年 1 月 2 日,用 8 位数字 20100102 表示,它是回文的。● 对于 2010 年 10 月 2 日,用 8 位数字 20101002 表示,它不是回文的。每一年中都有 12 个月份:其中, 1 、  3 、  5 、  7 、  8 、  10 、  12 月每个月有 31 天;  4 、  6 、  9 、  11 月每个 月有30 天;而对于 2 月,闰年时有 29 天,平年时有 28 天。一个年份是闰年当且仅当它满足下列两种情况其中的一种:1.  这个年份是 4 的整数倍,但不是 100 的整数倍;2.  这个年份是 400 的整数倍。 例如:●  以下几个年份都是闰年: 2000 、  2012 、  2016 。●  以下几个年份是平年: 1900 、  2011 、  2014 。【输入格式】从文件date.in 中读入数据。输入包括两行,每行包括一个 8 位数字。第一行表示牛牛指定的起始日期date1  。第二行表示牛牛指定的终止日期date2  。保证 date1  和 date2  都是真实存在的日期,且年份部分一定为 4 位数字,且首位数 字不为 0 。保证 date1  一定不晚于 date2  。【输出格式】输出到文件date.out 中。输出一行,包含一个整数,表示在 date1  和 date2  之间,有多少个日期是回文的。【样例1输入】2011010120111231【样例1输出】1【样例2输入】2000010120101231【样例2输出】2【样例说明】对于样例1 ,符合条件的日期是 20111102 。对于样例2 ,符合条件的日期是 20011002 和 20100102 。【子任务】对于 60% 的数据,满足 date1  = date2  。
简答题 海港 (port)【问题描述】小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来 自不同国家的乘客。小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船 只情况;对于第 i 艘到达的船,他记录了这艘船到达的时间 ti     (单位:秒),船上的乘 客数量 ki  ,以及每名乘客的国籍 xi, 1 , xi,2 , . . . , xi,ki   。小K统计了n 艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的 24 小时 ( 24 小时 = 86400 秒) 内所有乘船到达的乘客来自多少个不同的国家。形式化地讲,你需要计算 n 条信息。 对于输出的第 i 条信息,你需要统计满足  的船只p ,在所有的 xp,j  中,总共有多少个不同的数。【输入格式】从文件port.in 中读入数据。第一行输入一个正整数n ,表示小K统计了n 艘船的信息。接下来 n 行,每行描述一艘船的信息:前两个整数 ti  和 ki  分别表示这艘船到达海 港的时间和船上的乘客数量,接下来 ki  个整数 xi,j  表示船上乘客的国籍。保证输入的ti  是递增的,单位是秒;表示从小K第一次上班开始计时,这艘船在第 ti  秒到达海港。【输出格式】输出到文件port.out 中。输出n 行,第 i 行输出一个整数表示第i 艘船到达后的统计信息。【样例1输入】31  4  4  1  2  22  2  2  310  1  3【样例1输出】344【样例1说明】第一艘船在第 1 秒到达海港,最近 24 小时到达的船是第一艘船,共有 4 个乘客, 分别是来自国家 4, 1, 2, 2 ,共来自 3 个不同的国家;第二艘船在第 2 秒到达海港,最近 24 小时到达的船是第一艘船和第二艘船,共有 4 + 2 = 6 个乘客,分别是来自国家 4, 1, 2, 2, 2, 3 ,共来自4 个不同的国家;第三艘船在第 10 秒到达海港,最近 24 小时到达的船是第一艘船、第二艘船和第 三艘船,共有 4 + 2 + 1 = 7 个乘客,分别是来自国家 4, 1, 2, 2, 2, 3, 3 ,共来自4 个不同 的国家。【样例2输入】41  4  1  2  2  33  2  2  386401  2  3  486402  1  5【样例2输出】3334【样例2说明】第一艘船在第 1 秒到达海港,最近 24 小时到达的船是第一艘船,共有 4 个乘客, 分别是来自国家 1, 2, 2, 3 ,共来自 3 个不同的国家;第二艘船在第 3 秒到达海港,最近 24 小时到达的船是第一艘船和第二艘船,共有 4 + 2 = 6 个乘客,分别是来自国家 1, 2, 2, 3, 2, 3 ,共来自 3 个不同的国家;第三艘船在第 86401 秒到达海港,最近 24 小时到达的船是第二艘船和第三艘船, 共有 2 + 2 = 4 个乘客,分别是来自国家 2, 3, 3, 4 ,共来自 3 个不同的国家;第四艘船在第 86403 秒到达海港,最近 24 小时到达的船是第二艘船、第三艘船和 第四艘船,共有 2 + 2 + 1 = 5 个乘客,分别是来自国家 2, 3, 3, 4, 5 ,共来自4 个不同的 国家。
简答题 魔法阵 (magic)【问题描述】六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能 量。大魔法师有 m 个魔法物品,编号分别为 1, 2, . . . , m 。每个物品具有一个魔法值,我 们用xi  表示编号为 i 的物品的魔法值。每个魔法值xi  是不超过n 的正整数,可能有多 个物品的魔法值相同。大魔法师认为,当且仅当四个编号为a, b, c, d 的魔法物品满足 xa  < xb  < xc  < xd  , xb - xa  = 2(xd - xc ) ,并且 xb - xa  < (xc - xb ) ÷ 3 时,这四个魔法物品形成了一个魔法阵, 他称这四个魔法物品分别为这个魔法阵的A 物品,B 物品,C 物品,D 物品。现在,大魔法师想要知道,对于每个魔法物品,作为某个魔法阵的A 物品出现的 次数,作为B物品的次数,作为C 物品的次数,和作为D 物品的次数。【输入格式】从文件magic.in 中读入数据。输入文件的第一行包含两个空格隔开的正整数 n 和m 。接下来 m 行,每行一个正整数,第 i + 1 行的正整数表示xi  ,即编号为 i 的物品的 魔法值。保证每个 xi  是分别在合法范围内等概率 随机生成的。【输出格式】输出到文件magic.out 中。共输出 m 行,每行四个整数。 第 i 行的四个整数依次表示编号为 i 的物品作 为A,B,C,D 物品分别出现的次数。保证标准输出中的每个数都不会超过每行相邻的两个数之间用恰好一个空格隔开。【样例1输入】30  81247285292624【样例1输出】4  0  0  00  0  1  00  2  0  00  0  1  11  3  0  00  0  0  20  0  2  20  0  1  0【样例1说明】共有 5 个魔法阵,分别为:物品 1, 3, 7, 6 ,其魔法值分别为 1, 7, 26, 29 ;物品 1, 5, 2, 7 ,其魔法值分别为 1, 5, 24, 26 ;物品 1, 5, 7, 4 ,其魔法值分别为 1, 5, 26, 28 ;物品 1, 5, 8, 7 ,其魔法值分别为 1, 5, 24, 26 ;物品 5, 3, 4, 6 ,其魔法值分别为 5, 7, 28, 29 。以物品 5 为例,它作为A 物品出现了 1 次,作为B物品出现了 3 次,没有作为C 物 品或者D 物品出现,所以这一行输出的四个数依次为 1, 3, 0, 0 。此外,如果我们将输出看作一个 m 行 4 列的矩阵,那么每一列上的 m 个数之和都 应等于魔法阵的总数。所以,如果你的输出不满足这个性质,那么这个输出一定不正 确。你可以通过这个性质在一定程度上检查你的输出的正确性。【样例2输入】15  15123456789101112131415【样例2输出】5  0  0  04  0  0  03  5  0  02  4  0  01  3  0  00  2  0  00  1  0  00  0  0  00  0  0  00  0  1  00  0  2  10  0  3  20  0  4  30  0  5  40  0  0  5【子任务】每个测试点的详细数据范围见下表。
简答题 统计单词数【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位 置,有的还能统计出特定单词在文章中出现的次数。现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章 中出现的次数和第一次出现的位置。 注意:匹配单词时,不区分大小写,但要求完全匹配, 即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),  如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。【输入】输入文件名为stat.in,2行。第1行为一个字符串,其中只含字母,表示给定单词;第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。【输出】输出文件名为stat .out。只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开, 分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字 母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数- 1。【输入输出样例1】【输入输出样例1说明】输出结果表示给定的单词To在文章中出现两次,第一 次出现的位置为0。 【输入输出样例2】【输入输出样例2说明】表示给定的单词to在文章中没有出现,输出整数- 1。【 数据范围】1≤单词长度≤10。1≤文章长度≤1,000,000。
简答题 瑞士轮【背景】在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和 循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公 平,偶然性较低,但比赛过程往往十分冗长。本题中介绍的瑞士轮赛制,因最早使用于1895年在瑞士举办的国际象棋比赛而得名。 它可以看作是淘汰赛与循环赛的折衷,既保证了比赛的稳定性,又能使赛程不至于过长。【问题描述】2*N名编号为1~2N的选手共进行R轮比赛。每轮比赛开始前,以及所有比赛结束后, 都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已 参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。每轮比赛的对阵安排与该轮比赛开始前的排名有关:第1 名 和 第 2 名 、 第 3 名 和 第 4 名、 … … 、第2K - 1名和第2K名、 … …  、第2N - 1名和第2N名,各进行 一 场比赛。每 场比赛胜者得1分,负者得0分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确 定,而是要取决于选手在之前比赛中的表现。现给定每个选手的初始分数及其实力值,试计算在R轮比赛过后,排名第Q的选手编号是多少。我们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜。【输入】输入文件名为swiss .in。输入的第一行是三个正整数N、R、Q,每两个数之间用一个空格隔开,表示有2*N名 选手、R轮比赛,以及我们关心的名次Q。第二行是2*N个非负整数s1,s2,…,S2N,每两个数之间用一个空格隔开,其中si表示编 号为i的选手的初始分数。第三行是2*N个正整数w1,w2,…,w2N,每两个数之间用一个空格隔开,其中wi表示编 号为i的选手的实力值。【输出】输出文件名为swiss . out。输出只有一行,包含一个整数,即R轮比赛结束后,排名第Q的选手的编号。【输入输出样例】【输入输出样例说明】【数据范围】对于30%的数据,1≤N≤100;对于50%的数据,1≤N≤10,000;对于100% 的数据,1≤N≤100,000,1≤R≤50,1≤Q≤2N,0≤S1,S2, … ,S2N≤10⁸,l≤wi, w2, …,w2N≤10⁸。
简答题 买铅笔 (pencil)【问题描述】P 老师需要去商店买 n 支铅笔作为小朋友们参加NOIP 的礼物。她发现商店一共有 3 种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P 老师决定只买同一种包装的铅笔。商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过 n 支铅笔才够给小朋 友们发礼物。现在P 老师想知道,在商店每种包装的数量都足够的情况下,要买够至少n 支铅 笔最少需要花费多少钱。【输入格式】从文件pencil.in 中读入数据。输入的第一行包含一个正整数n ,表示需要的铅笔数量。接下来三行,每行用两个正整数描述一种包装的铅笔:其中第一个整数表示这种 包装内铅笔的数量,第二个整数表示这种包装的价格。保证所有的 7 个数都是不超过 10000 的正整数。【输出格式】输出到文件pencil.out 中。输出一行一个整数,表示P 老师最少需要花费的钱。【样例1输入】572  250  3030  27【样例1输出】54【样例1说明】铅笔的三种包装分别是:●  2 支装,价格为 2 ;●  50 支装,价格为 30 ;●  30 支装,价格为 27 。P老师需要购买至少57 支铅笔。如果她选择购买第一种包装,那么她需要购买 29 份,共计 2 × 29 = 58 支,需要花 费的钱为 2 × 29 = 58 。实际上,P老师会选择购买第三种包装,这样需要买 2 份。 虽然最后买到的铅笔数 量更多了,为 30 × 2 = 60 支,但花费却减少为 27 × 2 = 54 ,比第一种少。对于第二种包装,虽然每支铅笔的价格是最低的,但要够发必须买 2 份,实际的 花费达到了 30 × 2 = 60 ,因此P老师也不会选择。所以最后输出的答案是 54 。【样例2输入】9998128  233128  2333128  666【样例2输出】18407【样例3输入】9999101  11111  99991111  9999【样例3输出】89991【子任务】子任务会给出部分测试数据的特点。如果你在解决题目中遇到了困难,可以尝试 只解决一部分测试数据。每个测试点的数据规模及特点如下表:上表中“整倍数”的意义为:若为“√” ,表示对应数据所需要的铅笔数量 n 一定是每 种包装铅笔数量的整倍数 (这意味着一定可以不用多买铅笔)。
简答题  推销员【问题描述】阿明是一名推销员,他奉命到螺丝街推销他们公司的产品。螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户。螺丝街一共有 N 家住户,第 i 家住户到入口的距离为 Si 米。由于同一栋房子里可以有多家住户,所以可能有多家住户与入口的距离相等。阿明会从入口进入,依次向螺丝街的 X 家住户推销产品,然后再原路走出去。 阿明每走 1 米就会积累 1 点疲劳值,向第 i 家住户推销产品会积累 Ai点疲劳值。阿明是工作狂,他想知道,对于不同的 X,在不走多余的路的前提下,他最多可以积累多少点疲劳值。【输入格式】输入文件名为 salesman.in。第一行有一个正整数 N,表示螺丝街住户的数量。 接下来的一行有 N 个正整数,其中第 i 个整数 Si表示第 i 家住户到入口的距离。数据保证接下来的一行有 N 个正整数,其中第 i 个整数 Ai表示向第 i 户住户推销产品会积累的疲劳值。数据保证【输出格式】输出文件名为 salesman.out。输出 N 行,每行一个正整数,第 i 行整数表示当 X=i 时,阿明最多积累的疲劳值。【输入输出样例 1】【输入输出样例 1 说明】X=1: 向住户 5 推销,往返走路的疲劳值为 5+5,推销的疲劳值为 5,总疲劳值为15。X=2: 向住户 4、5 推销,往返走路的疲劳值为 5+5,推销的疲劳值为 4+5,总疲劳值为 5+5+4+5=19。X=3: 向住户 3、4、5 推销,往返走路的疲劳值为 5+5,推销的疲劳值 3+4+5,总疲劳值为 5+5+3+4+5=22。X=4: 向住户 2、3、4、5 推销,往返走路的疲劳值为 5+5,推销的疲劳值 2+3+4+5,总疲劳值 5+5+2+3+4+5=24。X=5: 向住户 1、2、3、4、5 推销,往返走路的疲劳值为 5+5,推销的疲劳值 1+2+3+4+5,总疲劳值 5+5+1+2+3+4+5=25。【输入输出样例 2】【输入输出样例 2 说明】X=1:向住户 4 推销,往返走路的疲劳值为 4+4,推销的疲劳值为 4,总疲劳值 4+4+4=12。X=2:向住户 1、4 推销,往返走路的疲劳值为 4+4,推销的疲劳值为 5+4,总疲劳值4+4+5+4=17。X=3:向住户 1、2、4 推销,往返走路的疲劳值为 4+4,推销的疲劳值为 5+4+4,总疲劳值 4+4+5+4+4=21。X=4:向住户 1、2、3、4 推销,往返走路的疲劳值为 4+4,推销的疲劳值为 5+4+3+4,总疲劳值 4+4+5+4+3+4=24。或者向住户 1、2、4、5 推销,往返走路的疲劳值为 5+5,推销的疲劳值为 5+4+4+1,总疲劳值 5+5+5+4+4+1=24。X=5:向住户 1、2、3、4、5 推销,往返走路的疲劳值为 5+5,推销的疲劳值为 5+4+3+4+1,总疲劳值 5+5+5+4+3+4+1=27。【数据说明】对于 20%的数据,1≤N≤20;对于 40%的数据,1≤N≤100;对于 60%的数据,1≤N≤1000;对于 100%的数据,1≤N≤100000。
公众号
客服 反馈
顶部