![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jisuanke NOIP
计蒜客NOIP习题练习
数学作曲家
软件工程 记录学习
展开
-
NOIP36
机器人的相遇问题问题描述蒜头君和花椰菜君各做了一个机器人,小蒜和小花。蒜头君和花椰菜君打算用他们的机器人做个试验,同时放在圆形跑道上的两个点上,各自朝顺时针方向走,直到同时停留在相同的点上为止,即相遇点必须同时是双方走的某一步的终点。假设圆形跑道的长度为 L,出发点的位置为原点 0,顺时针方向为正方向。这样我们就得到了一条首尾相接的数轴。设小蒜的出发点坐标是 x,小花的出发点坐标是 y。小蒜一步能走 m 米,小花一步能走 n 米。现在请你来算一算,它们走了多少步以后才会碰面。输入格式输入一行,输原创 2021-03-04 00:36:22 · 251 阅读 · 1 评论 -
NOIP35
同余方程Description求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。Input输入只有一行,包含两个正整数 a, b,用一个空格隔开。2 ≤a, b≤ 2,000,000,000Output输出只有一行,包含一个正整数 x0,即最小正整数解。输入数据保证一定有解。Sample Input3 10Sample Output7HINT题解这道题一看就是求逆元的裸题#include <cstdio>using namespace std;原创 2021-03-04 00:33:55 · 227 阅读 · 1 评论 -
NOIP34
质数原根问题描述如果一个数 x(0< x< p),满足集合 {xi%p∣1≤i< p} 等价于集合 {1,⋯,p−1},则我们称 x 为质数 p 的一个原根。例如,假设 p 为 3,2 的各项幂对 3 取余的结果为 2,1,则 2 为质数 p 的一个原根。现在已知一个质数 p,求质数 p 的原根个数。输入格式输入有多组数据,不超过100行。每组数据输入一行,输入一个质数 p(3≤p≤100,000)。输出格式对于每组测试数据,输出一行,输出质数 p 的原根个数。样例输入原创 2021-03-04 00:30:20 · 160 阅读 · 1 评论 -
NOP33
互质数个数给定一个整数 nn,请问有多少个整数 i满足条件:gcd(i, n) = 1,1<=i<=n;输入格式输入一行,输入一个整数 n(n<=10^9)。输出格式输出一行,输出一个整数,表示符合条件的整数个数。样例输入16样例输出8解题思路:利用欧拉函数求解但是此题数据量大 10^9 用筛法打表10^9必然超时 直接判素也会超时 所以打表10^5 然后大于10^5的数据判素即可#include <bits/stdc++.h>using n原创 2021-03-04 00:28:37 · 150 阅读 · 1 评论 -
NOIP32
素数距离蒜头君请你求出区间 [l,r][l,r] 上距离最近的相邻的素数对和距离最远的相邻的素数对。3,53,5 是相邻的素数,2, 52,5 不是相邻的素数。距离定义为 22 个素数的差的绝对值。比如 5,75,7 距离为 22。输入格式输入 22 个整数 l, r(1 \le l \le r \le 8000000)l,r(1≤l≤r≤8000000)输出格式如果 a, b(a < b)a,b(a<b) 是距离最近的素数对,c,d(c < d)c,d(c<d) 是距离最原创 2021-03-04 00:26:12 · 145 阅读 · 1 评论 -
NOIP31
蒜头君的猜想有一天蒜头君突发奇想,他有一个猜想,任意一个大于 22 的偶数好像总能写成 22 个质数的和。蒜头君查了资料,发现这个猜想很早就被一个叫哥德巴赫的人提出来了,称为哥德巴赫猜想。目前还没有证明这个猜想的正确性。蒜头君告诉你一个整数 nn ,让你用这个数去验证。注意 11 不是质数。输入格式输入一个偶数 n(2 < n \le 8000000)n(2<n≤8000000)输出格式输出一个整数表示有多少对 (x,y)(x,y) 满足 x + y = n(x \le y)x+y=n原创 2021-03-04 00:24:04 · 128 阅读 · 1 评论 -
NOIP30
取石子游戏问题描述蒜头君和花椰妹在玩一个游戏,他们在地上将 n 颗石子排成一排,编号为 1 到 n。开始时,蒜头君随机取出了 2 颗石子扔掉,假设蒜头君取出的 2 颗石子的编号为 a, b。游戏规则如下,蒜头君和花椰妹 2 人轮流取石子,每次取石子,假设某人取出的石子编号为 i,那么必须要找到一对 j, k 满足 i=j−k 或者 i=j+k ,并且编号为 j,k 的石子已经被取出了,如果谁先不能取石子了,则视为输了。蒜头君比较绅士,让花椰妹先手。输入格式第一行输入一个整数 t(1≤t≤500),表原创 2021-03-01 17:41:15 · 141 阅读 · 0 评论 -
NOIP29
两仪剑法问题描述两仪剑法是武当派武功的高级功夫,且必须 2 个人配合使用威力才大。同时该剑法招数变化太快、太多。设武当弟子甲招数变化周期为 n,武当弟子乙招数变化周期为 m,两弟子同时使用该剑法,当 2 人恰好同时达到招数变化周期结束时,威力最大,此时能将邪教妖人置于死地。请你计算威力最大时,每人用了多少招?输入格式首先输入一个 t(t<100000) 表示测试组数。接下来 t组输入,每组输入 2 个数n,m(1≤n,m≤1000000000)。输出格式对于每组输出,输出用了多少招数。原创 2021-03-01 17:39:14 · 98 阅读 · 0 评论 -
NOIP28
问题描述蒜头君在玩一种接龙的游戏,蒜头君有 30000 张卡片分别放在 30000 列,每列依次编号为 1,2,…,300001,2,…,30000。同时,蒜头君也把每张卡片依次编号为 1,2,…,30000游戏开始,蒜头君让让第 ii 张卡片处于第i(i=1,2,…,30000) 列。然后蒜头君会发出多次指令,每次调动指令 M i j 会将第 i 张卡片所在的队列的所有卡片,作为一个整体(头在前尾在后)接至第 j 张卡片所在的队列的尾部。蒜头君还会查看当前的情况,发出 CC ii jj 的指令,即询原创 2021-03-01 17:36:21 · 95 阅读 · 0 评论 -
NOIP27
找出所有谎言蒜头君有很多卡片,每张卡片正面上印着“剪刀”,“石头”或者“布”三种图案中的一种,反面则印着卡片的序号。“剪刀”,“石头”和“布”三种构成了一个有趣的环形,“剪刀”可以战胜“布”,“布”可以战胜“石头”,“石头”可以战胜“剪刀”。现有 N 张卡片,以 1-N 编号。每张卡片印着“剪刀”,“石头”,“布”中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 张卡片所构成的关系进行描述:第一种说法是“1 X Y”,表示 X 号卡片和 Y 号卡片是同一种卡片。第二种说法是“2 X原创 2021-03-01 17:33:17 · 123 阅读 · 0 评论 -
NOIP26
网络交友问题描述在网络社交的过程中,通过朋友,也能认识新的朋友。在某个朋友关系图中,假定 A 和 B 是朋友,B 和 C 是朋友,那么 A 和 C 也会成为朋友。即,我们规定朋友的朋友也是朋友。现在要求你每当有一对新的朋友认识的时候,你需要计算两人的朋友圈合并以后的大小。输入格式第一行:一个整数 n(n≤5000),表示有 n 对朋友认识。接下来 n 行:每行输入两个名字。表示新认识的两人的名字,用空格隔开。(名字是一个首字母大写后面全是小写字母且长度不超过 20 的串)。输出格式对于每一对原创 2021-03-01 17:31:11 · 109 阅读 · 0 评论 -
NOIP25
在社交的过程中,通过朋友,也能认识新的朋友。在某个朋友关系图中,假定 A 和 B 是朋友,B 和 C 是朋友,那么 A 和 C 也会成为朋友。即,我们规定朋友的朋友也是朋友。现在,已知若干对朋友关系,询问某两个人是不是朋友。请编写一个程序来解决这个问题吧。输入格式第一行:三个整数 n,m,p(n≤5000,m≤5000,p≤5000),分别表示有 n 个人,m 个朋友关系,询问 p 对朋友关系。接下来 m 行:每行两个数Ai,Bi(0<=Ai,Bi<=N)表示 Ai和 Bi具有朋友关系原创 2021-03-01 17:28:55 · 89 阅读 · 0 评论 -
NOIP24
n个最小和给出两个包含 nn 个整数的数组 AA,BB。分别在 AA, BB 中任意出一个数并且相加,可以得到 n^2n2个和。求这些和中最小的 nn 个。输入格式输入第一行一个整数 n(1 \le n \le 50000)n(1≤n≤50000)。接下来一行输入数组 AA,用空格隔开。接下来一行输入数组 BB,用空格隔开。1 \le A_i, B_i \le 10^9 1≤A i ,B i ≤ 10^9 次方输出格式从小到大输出最小的 nn 个和,用空格隔开。样例输入复制41 3原创 2021-03-01 17:18:04 · 263 阅读 · 0 评论 -
NOIP23
任务系统蒜头君设计了一个任务系统。这个系统是为了定时提醒蒜头君去完成一些事情。系统大致如下,初始的时候,蒜头君可能会注册很多任务,每一个任务的注册如下:Register Q_num Period表示从系统启动开始,每过 PeriodPeriod 秒提醒蒜头君完成编号为 Q_{num}Qnum 的任务。你能计算出蒜头君最先被提醒的 kk 个任务吗?输入格式第一行输入 n(0 < n \le 3000)n(0<n≤3000),k(0 < k \le 10000)k(0&l原创 2021-03-01 17:14:27 · 135 阅读 · 0 评论 -
NOIP22
蛇形矩阵输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。具体矩阵形式可参考样例。输入格式输入共一行,包含两个整数n和m。输出格式输出满足要求的矩阵。矩阵占n行,每行包含m个空格隔开的整数。数据范围1≤n,m≤100输入样例:3 3输出样例:1 2 38 9 47 6 5...原创 2021-03-01 17:09:45 · 118 阅读 · 0 评论 -
NOIP21
“敲7有一种酒桌游戏叫做“敲7”,规则是从一个人开始,说出任意数字,其他人会顺序往后报,如果一个数字包含 77,或者是 77 的倍数,那么需要敲打杯子或盘子,不能说出。现在 nn 个人围坐在一个圆桌周围,他们编号从 11 到 nn 顺时针排列。从某一人开始报出一个数字,其他人会按照顺时针方向顺序往后报(加一),如果某个人的数字包含 77,或者是 77 的倍数,那么他将退出游戏,下一个人继续接着报,直到剩一个人为止。输入格式第一行输入三个整数,nn,mm,tt。nn 代表总人数,mm 代表从第 mm原创 2021-03-01 17:08:54 · 654 阅读 · 0 评论 -
NOIP20
报数有 nn 个小朋友做游戏,他们的编号分别是 1,2,3…n1,2,3…n。他们按照编号从小到大依次顺时针围成一个圆圈,从第一个小朋友开始从 11 报数,依次按照顺时针方向报数(加一),报 mm 的人会离开队伍,然后下一个小朋友会继续从 11 开始报数,直到只剩一个小朋友为止。输入格式第一行输入两个整数,nn,mm。(1 \leq n,m \leq 10001≤n,m≤1000)输出格式输出最后一个小朋友的编号,占一行。样例输入复制10 5样例输出复制3#include<iost原创 2021-02-28 23:08:39 · 141 阅读 · 0 评论 -
NOIP19
网页跳转蒜头君每天都在用一款名为“蒜厂浏览器”的软件。在这个浏览器中,一共三种操作:打开页面、回退和前进。它们的功能如下:打开页面:在地址栏中输入网址,并跳转到网址对应的页面;回退:返回到上一次访问的页面;前进:返回到上次回退前的页面,如果上一次操作是打开页面,那么将无法前进。现在,蒜头君打开浏览器,进行了一系列操作,你需要输出他每次操作后所在页面的网址。输入格式第一行输入一个整数 n(0 < n \le 100000)n(0<n≤100000),表示蒜头君的操作次数。接下来一共原创 2021-02-28 23:05:45 · 161 阅读 · 0 评论 -
NOIP18
括号匹配蒜头君在纸上写了一个串,只包含’(‘和’)’。一个’(‘能唯一匹配一个’)’,但是一个匹配的’(‘必须出现在’)'之前。请判断蒜头君写的字符串能否括号完全匹配,如果能,输出配对的括号的位置(匹配的括号不可以交叉,只能嵌套)。输入格式一行输入一个字符串只含有’(‘和’)’,输入的字符串长度不大于 5000050000。输出格式如果输入括号不能匹配,输出一行"No",否则输出一行"Yes",接下来若干行每行输出 22 个整数,用空格隔开,表示所有匹配对的括号的位置(下标从 11 开始)。你可以原创 2021-02-28 23:01:03 · 99 阅读 · 0 评论 -
NOIP17
水果店蒜头君经营着一个不大的水果店。他认为生存之道就是经营最受顾客欢迎的水果。现在他想要一份水果销售情况的明细表,这样就可以很容易掌握所有水果的销售情况了。蒜头君告诉你每一笔销售记录的水果名称,产地和销售的数量,请你帮他生成明细表。输入格式第一行是一个整数 N(0 < N \le 1000)N(0<N≤1000),表示蒜头君有 NN 次成功的交易。其后有 NN 行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过 100100),水果产地(小写字母组成,长度不超过 100100)原创 2021-02-28 22:27:08 · 151 阅读 · 0 评论 -
NOIP16
蒜头君面试蒜头君来蒜厂面试的时候,曾经遇到这样一个面试题:给定 nn 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一个。当时可算是给蒜头君难住了。现在蒜头君来考考你。输入格式第一行输入一个整数 n(1 \le n \le 100000)n(1≤n≤100000),接下来一行输入 nn 个 int 范围内的整数。输出格式输出出现次数最多的数和出现的次数,中间用一个空格隔开,如果有多个重复出现的数,输出值最大的那个。样例输入1复制51 1 2 3 4样例输出1复制1原创 2021-02-28 21:50:39 · 163 阅读 · 0 评论 -
NOIP14
蒜头君学英语蒜头君快要考托福了,这几天,蒜头君每天早上都起来记英语单词。花椰妹时不时地来考一考蒜头君:花椰妹会询问蒜头君一个单词,如果蒜头君背过这个单词,蒜头君会告诉花椰妹这个单词的意思,不然蒜头君会跟花椰妹说还没有背过。单词是由连续的大写或者小写字母组成。注意单词中字母大小写是等价的。比如You和you是一个单词。输入格式首先输入一个 n(1 \le n \le 100000)n(1≤n≤100000) 表示事件数。接下来 nn 行,每行表示一个事件。每个事件输入为一个整数 dd 和一个单词 wor原创 2021-02-28 19:23:56 · 101 阅读 · 0 评论 -
NOIP13
计算集合的并给你两个集合,计算其并集,即 {A} + {B}{A}+{B}。注:{A} + {B}{A}+{B} 中不允许出现重复元素,但是 {A}{A} 与 {B}{B} 之间可能存在相同元素。输入格式输入数据分为三行,第一行有两个数字 n, m(0<n,m\leq 10000)n,m(0<n,m≤10000),分别表示集合 A 和集合 B 的元素个数。后两行分别表示集合 A 和集合 B。每个元素为不超出 int 范围的整数,每个元素之间用一个空格隔开。输出格式输出一行数据,表示合原创 2021-02-28 17:13:50 · 100 阅读 · 0 评论 -
NOIP12
堆积木蒜头君有 nn 块积木,编号分别为 11 到 nn。一开始,蒜头把第 ii 块积木放在位置 ii。蒜头君进行 mm 次操作,每次操作,蒜头把位置 bb 上的积木整体移动到位置 aa 上面。比如 11 位置的积木是 11,22 位置的积木是 22,那么把位置 22 的积木移动到位置 11 后,位置 11 上的积木从下到上依次为 1,21,2。输入格式第一行输入 22 个整数 n,m(1 \le n \le 10000, 0 \le m \le 10000)n,m(1≤n≤10000,0≤m≤100原创 2021-02-28 16:23:09 · 205 阅读 · 0 评论 -
NOIP11
打印锯齿矩阵锯齿矩阵是指每一行包含的元素个数不相同的矩阵,比如:13 5 2 6 122 3 431 6 2 7读入若干对整数 (x,y)(x,y),表示在第 xx 行的末尾加上一个元素 yy。输出最终的锯齿数组。初始时矩阵为空。输入格式第一行输入两个整数 n,m(1 \leq n,m \leq 10000)n,m(1≤n,m≤10000),其中 nn 表示锯齿数组的行数,mm 表示插入的元素总数。接下来一共 mm 行,每行两个整数 x,y(1 \leq x \leq n, 0 \le原创 2021-02-28 15:58:39 · 100 阅读 · 0 评论 -
NOIP15
一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数。比如 121121,23322332 都是回文数,13,456713,4567 不是回文数。任意一个正整数,如果其不是回文数,将该数交换高低位以后和原数相加得到一个新的数,如果新数不是回文数,重复这个变换,直到得到一个回文数为止。例如,5757 变换后得到 132(57 + 75)132(57+75),132132 得到 363(132 + 231)363(132+231),363363 是一个回文数。曾经有数学家猜想:对于任意正整数,经过原创 2021-02-28 21:04:02 · 109 阅读 · 0 评论 -
NOIP10
输入一个十进制数 NN,将它转换成 RR 进制数输出。在 10 \le R \le 1610≤R≤16 的情况下,用’A’表示 1010,用’B’表示 1111,用’B’表示 1111,用’C’表示 1212,用’D’表示 1313,用’E’表示 1414,用’F’表示 1515。输入格式输入包含两个整数 N(N \le 10000)N(N≤10000) 和 R(2 \le R \le 16)R(2≤R≤16)。注意,NN 有可能是负整数。输出格式输出一行,表示转换后的数。样例输入复制23 1原创 2021-02-23 17:24:17 · 114 阅读 · 0 评论 -
NOIP9
蒜头君很无聊,现在有 NN 个数,其中第 i(1 \leq i \leq N)i(1≤i≤N) 个数是 A_iAi 。现在他先将 A_{l_1}, A_{l_1+1}…A_{r_1}Al1 ,Al1 +1 …Ar1 从小到大排序。再将 A_{l_2}, A_{l_2+1}…A_{r_2}Al2 ,Al2 +1 …Ar2 从大到小排序。请输出 AA 排序后的最终结果。输入格式第一行五个整数 N, l_1,原创 2021-02-23 17:23:35 · 110 阅读 · 0 评论 -
NOIP8
蒜头君想在学校中请一些同学一起做一项问卷调查,为了确保实验的客观性,他先用计算机生成了 n(1 \le n \le 100)n(1≤n≤100) 个 11 到 10001000 之间的随机整数,对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助蒜头君完成“去重”与“排序”的工作。输入格式共两行,第一行为一个正整数 nn。第二行有 nn 个用空格隔开的正整数,为所产生的随机数。输出格式第一行输出一个原创 2021-02-23 17:21:05 · 89 阅读 · 0 评论 -
NOIP7
计算两个非负整数 A,BA,B 的乘积,A,BA,B 可能会很大。输入格式第一行输入一个非负整数 AA。第二行输入一个非负整数 BB。A,BA,B 的长度不大于 500500。输出格式输出 A\times BA×B 的值。样例输入复制43211234样例输出复制5332114#include <iostream>#include <vector>using namespace std;vector<int> mul(vector<原创 2021-02-23 17:20:05 · 73 阅读 · 0 评论 -
NOIP6
计算两个非负整数 A,BA,B 的和。不过这一次有些特殊,A,BA,B 可能会很大。输入格式第一行输入一个非负整数 AA。第二行输入一个非负整数 BB。A,BA,B 的长度不大于 500500。输出格式输出 A+BA+B 的值。不要有多余的前导零。样例输入复制1231234样例输出复制1357#include <iostream>#include <vector>using namespace std;vector<int> add(vect原创 2021-02-23 17:19:09 · 84 阅读 · 0 评论 -
NOIP5
四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多四个正整数的平方和。如果把 00 包括进去,就正好可以表示为四个数的平方和。比如:\displaystyle 5 = 0^2 + 0^2 + 1^2 + 2^25=02+02+12+22\displaystyle 7 = 1^2 + 1^2 + 1^2 + 2^27=12+12+12+22则对于一个给定的正整数 nn,可以表示为:n = a^2 + b^2 + c^2 + d^2n=a2+b2+c2+原创 2021-02-23 17:18:04 · 90 阅读 · 0 评论 -
NOIP4
给定一个 n \times mn×m 的矩阵 AA,求 AA 中的一个非空子矩阵,使这个子矩阵中的元素和最大。其中,AA 的子矩阵指在 AA 中行和列均连续的一部分。输入格式输入的第一行包含两个整数 n,m(1 \leq n,m \leq 50)n,m(1≤n,m≤50),分别表示矩阵 AA 的行数和列数。接下来 nn 行,每行 mm 个整数,表示矩阵 A_{i,j}(-1000 \leq A_{i,j} \leq 1000)Ai,j (−1000≤Ai,j ≤1000)。输出格式原创 2021-02-23 17:07:19 · 249 阅读 · 0 评论 -
NOIP3
给出一个 n\times mn×m 的整数矩阵,请你把这个矩阵顺时针旋转 90^{o}90o 以后输出。输入格式第一行输入两个整数 n,m(1 \le n, m\le 200)n,m(1≤n,m≤200),用空格隔开。接下来 nn 行,每行输入 mm 个整数,表示输入的矩阵。矩阵中元素都是 int 范围内的整数。输出格式输入 mm 行,每行 nn 个空格隔开的整数,表示旋转以后的矩阵。注意:每行末尾不能输出多余的空格。样例输入复制3 4-1 3 6 37 7 9 110 3 4 6样例原创 2021-02-23 16:59:53 · 106 阅读 · 0 评论 -
NOIP2
相信小伙伴们都学过斐波那契数列,它是这样的一个数列:1,1,2,3,5,8,13,21\cdots1,1,2,3,5,8,13,21⋯。用 f_nfn 表示斐波那契数列的第 nn 项,则有:f_1 = f_2 = 1f1 =f2 =1,f_n = f_{n-1} + f_{n-2} (n>2)fn =fn−1 +fn−2 (n>2)。输入一个 nn,求出 f_nfn 对 1000000007(10^9+7)1000000007(109原创 2021-02-23 16:01:13 · 116 阅读 · 0 评论 -
NOIP1
输入两个整数 a,ba,b,输出两个整数的和。输入格式第一行输入一个整数 TT,表示需要计算的次数。接下来 TT 行,每行输入两个用空格分隔的整数 a,ba,b。输出格式对于每次输入的 a, ba,b,输出 a + ba+b 的值。结果保证在 3232 位整型(int)范围内。样例输入复制51 23 45 67 89 10样例输出复制37111519#include<iostream>using namespace std;int main(){原创 2021-02-23 15:51:31 · 151 阅读 · 0 评论