登录社区云,与社区用户共同成长
邀请您加入社区
问题描述一年一度的"跳石头"比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 NN 块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点
第一行是一个整数 n,接下来 n 行每行是 2 个整数 ai,bi (ai<bi),表示比赛开始、结束的时间。由于 yyy 是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加 2 个及以上的比赛。现在各大 oj 上有 n 个比赛,每个比赛的开始、结束的时间点是知道的。yyy 认为,参加越多的比赛,noip 就能考的越好(假的)。所以,他想知道他最多能参加几个比赛。一个整数最多参加的比
小凯的疑惑题目描述小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在小凯无法准确支付的商品。输入描述输入数据仅一行,包含两个正整数 aa 和 bb,它们之间用一个空格隔开,表示小凯手中金币的面值。其中,1≤a,b≤1091≤
现在已知 n 个苹果到达地上的高度 xi,椅子的高度 a,陶陶手伸直的最大长度 b,陶陶所剩的力气 s,陶陶摘一个苹果需要的力气 yi,求陶陶最多能摘到多少个苹果。陶陶又跑去摘苹果,这次他有一个 a 公分的椅子。对于 100% 的数据,n≤5000, a≤50, b≤200, s≤1000, xi≤280, yi≤100。第 3 行~第 3+n−1 行:每行两个数 苹果高度 xi,摘这个
P1308 [NOIP 2011 普及组] 统计单词数。
【代码】题海拾贝:P1091 [NOIP 2004 提高组] 合唱队形。
龙虎斗题目描述轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有 nn 个兵营(自左至右编号 1 ~ nn),相邻编号的兵营之间相隔 1 厘米,即棋盘为长度为 nn − 1 厘米的线段。ii 号兵营里有 cici 位工兵。下图为 nn = 6 的输入描述轩轩在左侧,代表"龙";凯凯在右侧,代表"虎"。 他们以 mm 号兵营作为分界,靠左的工兵属于龙势力,靠右的工兵属于虎势力
为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品, 并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少。你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。100% 的数据满足:1≤n≤3×104,80≤w≤200,5≤Pi≤w。第一行包括一个整
其实,分块是一种思想,而不是一种数据结构。从 NOIP 到 NOI 到 IOI,各种难度的分块思想都有出现。分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。分块的时间复杂度主要取决于分块的块长,一般可以通过均值不等式求出某个问题下的最优块长,以及相应的时间复杂度。分块是一种很灵活的思想,相较于树状数组和线段树,分块的优点是通
文章摘要:本文主要介绍了栈和队列的基本概念及其操作。栈是一种遵循“先进后出”原则的数据结构,操作包括入栈、出栈、显示栈顶元素等。通过示例展示了栈的操作过程,并提出了相关问题。队列则是一种“先进先出”的数据结构,操作包括入队、出队、获取队首元素等。文章通过多个编程题目进一步讲解了队列的实现和应用,如模拟舞会配对、破解密码等。最后,文章列出了课后作业题目,供读者进一步练习和巩固所学知识。
根据经过顺序,在格子中依次填入 1, 2, 3, ... , n ,便构成了一个螺旋矩阵。对于 100%的数据,1≤n≤30,000,1≤i≤n,1≤j≤n。输入共一行,包含三个整数n,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。现给出矩阵大小 n 以及 i 和 j,请你求出该矩阵中第 i 行第 j 列的数是多少。输出共一行,包含一个整数,表示相应矩阵中第 i
表示阶乘,定义为 n!用高精度计算出 S=1!对于 100% 的数据,1≤n≤50。一个正整数 S,表示计算结果。
大家应该知道,约数是成对出现的(平方数除外),也就是说,一个数的第一小约数乘第一大约数相乘等于这个数,第二小约数乘第二大约数相乘也依然等于这个数!因此,只要找出n的最小约数(1除外),再用n除以这个数,就能得到结果了!已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数。这题真的不难,只不过数据点有点坑,因此要多多留意(小心!有人说,其实没必要枚举到2,枚举到n的平方根就行了。输出一
这段Java代码的主要功能是计算在给定范围[x, y]内,满足特定条件的整数对(i, j)的数量。具体来说,对于每个整数i,计算j = x * y / i,然后检查i和j的最大公约数(gcd)是否等于x,以及它们的最小公倍数(lcm)是否等于y。如果满足这两个条件,则计数器ans加1。代码中使用了递归方法计算gcd,并通过gcd计算lcm。最终,程序输出满足条件的整数对的数量。
若上一个保留的石头和终点之间的距离也小于num,说明最后一段距离不够,我们需要从当前保留的最后一个石头开始移除至少一个前面保留过的石头才能保证最短距离大于等于num。由于本题出现了最大最短跳跃距离这个最大最小值的关键词,我们考虑对答案区间(跳跃距离)使用二分查找。当上一个保留的石头与后面遍历到的石头之间的距离小于num的时候,我们可以将当前遍历到的石头移除。跳跃距离越大,移动次数越多,所以跳跃距离
但是明显不是最优的,用脑子想了一下,发现 dp[2][j](j>6)=20,这个 20 怎么来的呢,当然是从前一个状态来的(注意这里就可以分为两种情况了):一种是选择第二个物品放入,另一种还是选择前面的物品;接着 i=2 放两个物品,求的就是 dp[2][j] 了,当 j<5 的时候,是不是同样的 dp[2][j](j<5) 等于0;到这里就可以了,依次类推,动态转移方程为:dp[i][j]=ma
/遍历当前字符串的长度找到子串a[i]next.replace(j,a[i].size(),b[i]);if(str == a[i]) { // 如果字串和变换的串相同就可以做变换操作。规则的含义为:在 A 中的子串 A1 可以变换为 B1,A2 可以变换为 B2⋯。若在 10 步(包含 10 步)以内能将 A 变换为 B,则输出最少的变换步数;共进行了 3 次变换,使得 A 变换为 B。
NOIP2016 提高组 D2T1。
当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。第 3 行有 n−1 个数(0 或 1),表示第一个地窖至第 2 个、第 3 个 …如第 3 行为 11000⋯0,则表示第 1 个地窖至第 2 个地窖有路径,至第 3 个地窖有路径,至第 4 个地窖、第 5 个 …第 n+1 行有 1 个数,表示第 n−1 个地窖
某次科研调查时得到了 n 个自然数,每个数均不超过 1.5×109。已知不相同的数不超过 104 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。会自动按照键(即自然数)从小到大的顺序排序,我们只需遍历输入的自然数,统计每个数出现的次数,最后按顺序输出结果即可。共 m 行(m 为 n 个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出 2 个整数,
初看题,可能想到用BFS遍历图,然后将每次取完钱之后的结果累计,遇到酒吧就更新答案值。但是,本题为直接使用BFS必然会导致死循环,而标记每个走过的节点,又不能维护后来的值优于先来的值的情况。于是,需要先对强联通分量并入一个集合中进行(即让多个可以相互到达的点看作一个整体),之后就可以开心的用BFS处理了。关于缩点处理,本文采用的是算法,即用两遍DFS预处理图:第一次 DFS,选取任意顶点作为起点,
并查集学习笔记。
树状数组学习笔记
【代码】CSP CCF 201412-2 Z字形扫描 C++满分题解。
刷题是提升信息学竞赛能力的有效途径,也是其他奥林匹克竞赛学科常用的训练方法。选择高质量的在线刷题平台,针对不同类型的题目进行针对性练习。注重总结解题方法和技巧,建立错题本和知识点总结笔记。分析题目背后的算法思想和数据结构,提高问题分析和解决能力。同时,学习其他竞赛学科的解题策略,优化自己的解题方法。信息学奥林匹克竞赛作为奥林匹克竞赛体系中的重要组成部分,为学生提供了一个展示才华、挑战自我的国际平台
一个 n 行 n 列的螺旋矩阵可由如下方法生成:从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入 1,2,3,…,n2,便构成了一个螺旋矩阵。
ALC温馨提示抄代码是不好的习惯qaq输入两个正整数x0,y0,求出满足下列条件的PQPQ是正整数。要求 P,Q 以x0为最大公约数,以y0为最小公倍数。试求:满足条件的所有可能的PQ的个数。
墙上贴着许多形状相同的海报、照片。它们的边都是水平和垂直的。每个矩形图片可能部分或全部的覆盖了其他图片。所有矩形合并后的边长称为周长。
一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑。约翰想弄清楚他的田地已经形成了多少水坑。给出约翰田地的示意图,确定当中有多少水坑。由于近期的降雨,雨水汇集在农民约翰的田地不同的地方。我们用一个 N×M(1≤N≤100,1≤M≤100) 的网格图表示。第 2 行到第 N+1 行:每行 M 个字符,每个字符是。输入第 1 行:两个空格隔开的整数:N 和 M。,它们表示网格图中的一排。希望
并查集(Union-Find Set)是一种树型数据结构,专用于处理不相交集合的合并与查询问题。
有点思维的模拟题由于题目告诉我们每次选的花要确保任意两种之差都要小于等于 1(开始看错了)也就是说我们只有 只选 x 或 选x和 x+1 这两种选法我们如何选呢?我们可以先只考虑选 x 的花,这样就有两种情况了①.可以全选,即能够只选 x 花用完所有的钱 或 只选 x 花剩下的钱不能再买花了②.不能全选,即选完 x 花后还剩下了很多钱可以用来买 x+1 花这两种情况我们可以合并起来,一个显然的想法
写一个程序,输入一个形如DN的分数,输出它的小数形式。如果小数有循环节的话,把循环节放在一对圆括号中。例如,310.33333333写成0.333341写成0.123,整数x写成x.0。
现在是晚餐时间,而母牛们在外面分散的牧场中。Farmer John 按响了电铃,所以她们开始向谷仓走去。你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会一只最快的母牛)。在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛。每个牧场由一条条道路和一个或多个牧场连接(可能包括自己)。有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连。至少有一个牧场和谷仓
AtCoder Beginner Contest 391
本题是关于树的问题,刚开始我认为只要dfs,每一次找该点的下下一个点,然后枚举就可以了,但是我忽略了对于我刚开始就随便找了一个当作根,所以接下来的兄弟节点就不可能有联合权值,但是他们也是符合条件的,所以我们只需要枚举中间那个点就可以,只需要找到该点的邻居节点的最大值和次大值,至于联合权值的和,该点的邻居节点肯定要和其他邻居节点都要乘起来加和,所以我们可以算出来该点的邻居节点的和sum,然后遍历邻居
方法二,hanoi2函数,忘掉左中右,只有from、to、other,考虑1到N层圆盘怎么从from到to。不记录子问题的解就是暴力,记录子问题的解就是动态规划。(1)第一步,1到N-1层圆盘从from移动到other。(3)第三步,1到N-1层圆盘从other移动到to。(3)第三步,1到N-1层圆盘,从中间移动到右边。(1)把问题转化为规模缩小了的同类问题的子问题。(2)第二步,N层圆盘自己从
欸,我们可以发现,如果我们把排列分成 3 等份,那么我只要在中间这等分里找到一个素数 p,那么肯定能在左右两边都拿出两个数来组成素数 p 的两倍,比如如果我们选7,那么我们就可以选6 8构成 7 6 8,这样就有两个素数了,也就是说我们可以将两个数变成一个素数。比如最后一个样例是 2 1 3 4 5,那么如果我们后面要构造的话肯定只能构造5了,因为就算我们选的数是6,我们最小只能获得4,这显然不利
补题被C题gank了
两只牛逃跑到了森林里。Farmer John 开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和 John)。追击在10×10的平面网格内进行。一个格子可以是:一个障碍物,两头牛(它们总在一起),或者 Farmer John。两头牛和 Farmer John 可以在同一个格子内(当他们相遇时),但是他们都不能进入有障碍的格子。CF牛在地图里以固定的方式游荡。每分钟,它们可以向前移动或是
确实过了挺久了,本来想周末补的,但是周末太忙了,偏偏这场还是数论计算几何的场
快 noip 了,yyy 很紧张!
P5356 [Ynoi Easy Round 2017] 由乃打扑克 题解
UNIQUE VISION Programming Contest 2025 Spring (AtCoder Beginner Contest 398)
有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分。据说,如果至少满足了以下三个条件之一,公司A就可以控制公司BABA50%BAKK≥1C1CKCixiBx1xK50%给你一个表,每行包括三个数ijp:表明公司i享有公司j的p的股票。计算所有的数对hs,表明公司h控制公司s。至多有100个公司。
母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统。由于它们特殊的思考方式,它们对货币的数值感到好奇。传统地,一个货币系统是由1510202550100的单位面值组成的。母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值。举例来说, 使用一个货币系统12510产生1818×19×28×22×13×521,等等。写一个程序来计算有多少种方法用给定的货币系统来构造一定数量的
请考虑一个由1到N123N。现在请在数列中插入表示加,或者表示减,(空格) 表示空白(例如1-2 3就等于1-23),来将每一对数字组合在一起(请不要在第一个数字前插入符号)。计算该表达式的结果并判断其值是否为0。请你写一个程序找出所有产生和为零的长度为N的数列。
对于从1∼n的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。举个例子,如果n3,对于1233和12是唯一一种分法(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数)如果n7,有四种方法能划分集合1234567167和2345257和1346347和12561247和356给出n,你的程序应该输出划分方案总数。
给定n,求1∼n的表示中,各个字符出现了多少次。比如n5,表示为I, II, III, IV, V。总共有7个 I 出现,2个 V 出现。
每个餐桌由四个单元格定义:(3x+1,3y+1), (3x+1,3y+2), (3x+2,3y+1), (3x+2,3y+2)其中 x,y 为非负整数。如果有多张桌子的距离相同,他们会选择 x 最小的单元格,如果仍然相同,他们会选择 y 最小的单元格。与有关比较的容器有map,set,priority_queue,sort的数组。当ti为1时,优先从小根堆取点,同时要考虑当前桌子比走过剩余的角距离
切勿复杂化,这只是个C!首先我们要知道一个性质,即 a + b = a ^ b + 2 * (a & b)观察题目,即 x+k = a,y+k = b,a & b = 0那问题就转化为了 (x+k) & (y+k) = 0,即使得x+k后和y+k后的二进制位没有任何一位同时为1,那我们一个显然容易想到的做法是遍历每一位,如果此时相等,那么就从此位往后找,一直找到第一个两者二进制位不相同的地方,然后