
算法竞赛
AZWCL
木已成舟,只剩远航!
展开
-
蚂蚁感冒 -- 第五届蓝桥杯省赛C++A/B组
题目描述:长 100 厘米的细长直杆子上有 n 只蚂蚁。它们的头有的朝左,有的朝右。每只蚂蚁都只能沿着杆子向前爬,速度是 1 厘米/秒。当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。这些蚂蚁中,有 1 只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。输入格式第一行输入一个整数 n, 表示蚂蚁的总数。接着的一行是 n 个用空格分开的整数 Xi, Xi 的绝对值表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值原创 2020-08-18 10:46:26 · 205 阅读 · 0 评论 -
买不到的数目 -- 第四届蓝桥杯省赛C++A组
题目描述:小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。输入格式两个正整数 n,m,表示每种包装中糖的颗数。输出格式一个正整数,表示最大不能买到的糖数。数据范围2≤n,m≤原创 2020-08-17 08:53:47 · 206 阅读 · 0 评论 -
K倍区间 -- 第八届蓝桥杯省赛C++B组
题目描述:给定一个长度为 N 的数列,A1,A2,…AN,如果其中一段连续的子序列 Ai,Ai+1,…Aj 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。你能求出数列中总共有多少个 K 倍区间吗?输入格式第一行包含两个整数 N 和 K。以下 N 行每行包含一个整数 Ai。输出格式输出一个整数,代表 K 倍区间的数目。数据范围1≤N,K≤100000,1≤Ai≤100000输入样例:5 212345输出样例:6解题思路:1.最简单的方法,采用暴力枚原创 2020-08-16 10:46:33 · 358 阅读 · 0 评论 -
ACWING136 邻值查找
给定一个长度为 n 的序列 A,A 中的数各不相同。对于 A 中的每一个数 Ai,求:min1≤j<i|Ai−Aj|以及令上式取到最小值的 j(记为 Pi)。若最小值点不唯一,则选择使 Aj 较小的那个。输入格式第一行输入整数n,代表序列长度。第二行输入n个整数A1…An,代表序列的具体数值,数值之间用空格隔开。输出格式输出共n-1行,每行输出两个整数,数值之间用空格隔开。分别表示当i取2~n时,对应的min1≤j<i|Ai−Aj|和Pi的值。数据范围n≤105,|Ai|≤1原创 2020-08-15 17:23:24 · 176 阅读 · 0 评论 -
输入一组数字(可能包含重复数字),输出其所有的排列方式。
输入一组数字(可能包含重复数字),输出其所有的排列方式。样例输入:[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]与之前的不会重复的排列不一样,排列:https://blog.youkuaiyun.com/qq_43800455/article/details/104650325与该题不一样,那个是枚举位置,找数字现在是枚举数字,找位置AC代码class Solution {public: vector&l原创 2020-08-15 10:03:00 · 732 阅读 · 0 评论 -
ACWING 778. 字符串最大跨距
有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10。现在,我们想要检测S1和S2是否同时在S中出现,且S1位于S2的左边,并在S中互不交叉(即,S1的右边界点在S2的左边界点的左侧)。计算满足上述条件的最大跨距(即,最大间隔距离:最右边的S2的起始点与最左边的S1的终止点之间的字符数目)。如果没有满足条件的S1,S2存在,则输出-1。例如,S = “abcd123ab888efghij45ef67kl”, S1=”ab”, S2=”ef”,其中,S1在S中出现了2次,S原创 2020-08-13 19:41:13 · 275 阅读 · 0 评论 -
1005 继续(3n+1)猜想 -- PAT 乙级
题目描述卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他原创 2020-06-04 23:04:35 · 127 阅读 · 0 评论 -
四平方和--第七届蓝桥杯省赛C++A/B组
题目描述AC代码/*解法1:暴力枚举,枚举每一个数字,但是,这样子即便优化后,三重循环,仍然会超时!不可选!解法2:利用空间去换时间开始的时候,为了方便,直接开辟出五百万的int类型空间,反正空间大,不怂然后计算出a,b这两个数字的平方和,并记录下,数组下标是这两数字的平方和,数组里面的值是b这个数字的值!然后计算c,d,此时,计算出c的平方和d的平方,如果有对应a的平...原创 2020-04-05 16:35:49 · 236 阅读 · 0 评论 -
旧键盘打字 -- PAT乙级1033
描述旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?输入格式输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 10^5个字符的串。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,、.、-、+(代表上档键)。...原创 2020-04-26 11:41:19 · 178 阅读 · 0 评论 -
小数化分数2-- 2007省赛集训队练习赛(2)
小数化分数Ray在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。输入第一行是一个整数N,表示有多少组数据。每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。输出对每一个对应的小数化成最简...原创 2020-04-07 09:43:53 · 354 阅读 · 0 评论 -
激光炸弹--算法竞赛进阶指南
题目描述地图上有 N 个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi。注意:不同目标可能在同一位置。现在有一种新型的激光炸弹,可以摧毁一个包含 R×R 个位置的正方形内的所有目标。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个正方形的边必须和x,y轴平行。求一颗炸弹最多能炸掉地图上总价值为多少的目标。输入格式第一行输入正整数 N 和 ...原创 2020-04-05 22:16:43 · 385 阅读 · 0 评论 -
分巧克力--算法小笔记--第八届蓝桥杯省赛C++ A/B组
题目描述输入样例2 106 55 6输出样例2AC代码/*整体思路:其实只需要尝试即可,利用二分去尝试这个边长的蛋糕是否可以切出大于小朋友数目的块数即可 */ #include <cstdio>#include <cstring>#include <iostream>#include <algorithm>usi...原创 2020-04-05 17:51:16 · 334 阅读 · 0 评论 -
翻硬币--第四届蓝桥杯省赛C++ B组
题目描述小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。比如,可能情形是:**oo***oooo如果同时翻转左边的两个硬币,则变为:oooo***oooo现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?我们约定:把翻动相邻的两个硬币叫做...原创 2020-03-30 10:02:42 · 228 阅读 · 0 评论 -
飞行员兄弟--算法竞赛进阶指南
题目描述:“飞行员兄弟”这个游戏,需要玩家顺利的打开一个拥有16个把手的冰箱。已知每个把手可以处于以下两种状态之一:打开或关闭。只有当所有把手都打开时,冰箱才会打开。把手可以表示为一个4х4的矩阵,您可以改变任何一个位置[i,j]上把手的状态。但是,这也会使得第i行和第j列上的所有把手的状态也随着改变。请你求出打开冰箱所需的切换把手的次数最小值是多少。输入格式:入一共包含四行,每行...原创 2020-03-29 15:05:28 · 444 阅读 · 0 评论 -
幸运数--蓝桥杯历届试题本科B组Java题--C++解法
问题描述幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成。首先从1开始写出自然数1,2,3,4,5,6,…1 就是第一个幸运数。我们从2这个数开始。把所有序号能被2整除的项删除,变为:1 _ 3 _ 5 _ 7 _ 9 …把它们缩紧,重新记序,为:1 3 5 7 9 … 。这时,3为第2个幸运数,然后把所有能被3整除的序号位置的数删去。注意,是序号位置,不是那个数本...原创 2020-03-23 23:10:17 · 331 阅读 · 0 评论 -
递归实现组合型枚举--算法竞赛进阶指南
从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。输入格式两个整数 n,m ,在同一行用空格隔开。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行内的数升序排列,相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 5 7排在1 3 6 8前面)。数据范围n>0 ,0≤m≤n ,n+(n...原创 2020-03-09 09:11:33 · 386 阅读 · 0 评论 -
费解的开关--算法竞赛进阶指南
你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。我们用数字“1”表示一盏开着的灯,用数字“0”表示关着的灯。下面这种状态1011101101101111000011011在改变了最左上角的灯的状态后将变成:011...原创 2020-03-09 08:51:46 · 196 阅读 · 0 评论 -
递归实现排列型枚举--算法竞赛进阶指南
把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。输入格式一个整数n。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。数据范围1≤n≤9输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1/*主要思想:第...原创 2020-03-04 12:00:16 · 345 阅读 · 0 评论 -
递推实现指数型枚举--算法竞赛进阶指南
从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。对于没有选任何数的方案,输出空行。本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。数据范围1≤n≤15输入样例:3输出样例:322 311 31 21 2 3/*主要思...原创 2020-03-04 11:39:31 · 316 阅读 · 0 评论 -
cin/cout与scanf/printf的区别
优缺点scnaf/printf(相对于cin/cout)优点缺点速度快代码稍微长点,难写一点cin/cout (相对于scanf/printf)优点缺点写入方便速度慢scanf/printf相对于cin/cout,将近快一倍左右。如果将同步关闭的时候,cin稍慢于scanf,但是个别情况下还是会慢很多。建议不要搞辣么多花里胡哨的东西...原创 2019-12-10 21:08:25 · 2039 阅读 · 1 评论 -
由数据范围反推算法复杂度以及算法内容
一般ACM或者笔试题的时间限制是1秒或2秒。在这种情况下,C++代码中的操作次数控制在 107107 为最佳。下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:n≤30n≤30, 指数级别, dfs+剪枝,状态压缩dpn≤100n≤100 => O(n3)O(n3),floyd,dpn≤1000n≤1000 => O(n2)O(n2),O(n2logn)O(n2lo...转载 2019-12-10 20:42:17 · 174 阅读 · 0 评论 -
判断二叉树对称与否
––题目描述请实现一个函数,用来判断一个二叉树是不是对称的。注意如果一个二叉树通次二叉树的镜像是相同的,则定义其实对称的。题目:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...原创 2019-12-05 20:12:47 · 261 阅读 · 0 评论 -
华为OJ--Redraiment的走法--寻找最大递增子序列
题目:题目Redraiment的走法题目描述Redraiment是走梅花桩的高手。Redraiment总是起点不限,从前到后,往高的桩子走,但走的步数最多,不知道为什么?你能替Redraiment研究他最多走的步数吗?样例输入62 5 1 5 4 5样例输出3提示Example: 6个点的高度各为 2 5 1 5 4 5 如从第1格开始走,最多为3步...原创 2019-11-22 11:56:19 · 582 阅读 · 0 评论 -
蓝桥杯--传纸条
蓝桥杯问题–传纸条(动态规划)题目描述小渊和小轩是好朋友也是同班同学,他们在一起 总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运 的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。 从小渊传到小轩的纸条只...原创 2019-11-17 09:45:52 · 1766 阅读 · 4 评论 -
交换两个变量的输出
交换两个变量的输出1.三变量交换法#include <stdio.h>int main(){ int num1, num2; scanf("%d %d", &num1, &num2); int temp = num1;//利用定义一个中间临时变量去储存。 num1 = num2; num2 = temp; printf("%d %d\n", num...原创 2019-09-18 18:28:09 · 3460 阅读 · 3 评论