算法竞赛
文章平均质量分 50
自己写的题解
呆码农梦中识bug,程序员哭求加工资
这个作者很懒,什么都没留下…
展开
-
百练 2811:熄灯问题【枚举】(题目分析 + 详细注释 + C++代码)
题目传送门题意:每个方格有一盏灯,有亮和灭两种状态然后每个方格处也有一个按钮,按下这个按钮,会导致 当前方格和其上下左右的方格的灯的状态转变,即 亮 -> 灭,灭-> 亮求按按钮的方式分析:题目中也说了,按按钮的顺序不影响最后的结果(这是显然的,不说也应该知道)可能的做法有:1. 每个按钮有按和不按两种情况,如果直接枚举的话,那就是O(2 ^ 30),显然吃不消2. 既然没办法枚举所有的按钮,那么就要想办法排除掉一些无用的情况 ...原创 2021-08-09 17:30:52 · 688 阅读 · 1 评论 -
POJ 2182 Lost Cows(三种解法:暴力 和 线段树 和 树状数组)
题意:有n头牛,每头牛有一个序号(范围是1-n)。现在知道每头牛前面比自己序号小的牛的数量。需要求出每头牛的序号分析:可以想到的是,从后往前遍历。对于第i头牛,如果它前面有k头牛比它的序号小,那么它的序号就是当前仅剩编号中的第(k + 1)大的数。暴力求法(类似约瑟夫环)那么本题的难点就变成了如果求出剩下的编号中第m大的数,因为从后往前遍历的过程中,每确定一头牛的编号,那么剩下的编号就要去掉一个值。这和约瑟夫环非常的类似(本题没有环),因此可以用原创 2021-08-07 12:04:32 · 519 阅读 · 0 评论 -
Acwing 1107 魔板
题目传送门分析:我们可以把每一种棋盘状态看作一个结点,因为一共就8位数,所以结点数是有限的。也就是说我们可以用这些结点构建一个无向图。又因为每次转换的“花费”是相同的,即花一次转换机会因此图上的边权也相等而题目的问题就可以转化为求边权相等的图上两个点的最短距离那么就很明显是bfs了代码:#include<bits/stdc++.h> using namespace std;#define fi first#define se second.原创 2021-07-27 18:33:54 · 305 阅读 · 0 评论 -
POJ 2971 抓住那头牛(bfs)
题意:农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点NN,牛位于点KK。农夫有两种移动方式:从XX移动到X−1X−1或X+1X+1,每次移动花费一分钟 从XX移动到2∗X2∗X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?分析:对于 [0, 1e5]中的每一个i,我们可以将其想象成一个结点。i 和 i-1,i + 1, 2 * i 分别有一条边,这样就能形成一个图。那么问题...原创 2021-07-26 17:00:03 · 466 阅读 · 0 评论 -
Codeforces Round #713 (Div. 3) F. Education
题目传送门题意:有n个职位,在不同的职位能赚不同的钱;职位越高,工资越高(至少相等);升职需要一定的钱(可以理解为手续费),且升职当天没有工资(消耗一天);如果要凑够总数为c的钱,至少需要多少天(工资是日薪)分析:有点像背包问题?或者像是 2 ^ n 的枚举?但都不是!!!首先,要明白一点:如果要升职,早升职比晚升职好,因为手续费都是要交的,早升职,就能更早地享受高工资,那么就能更快凑够c(贪心)其次,如果不升职,因为不能跳级,那么就一直以当前职位继续下去,就不原创 2021-07-22 21:55:32 · 111 阅读 · 0 评论 -
Codeforces Round #725 (Div. 3)
题目传送门A. Stone Game题意:一个数列,每次操作只能删除最左边和最右边的数把最大值和最小值都删去时的最少操作次数分析:假设两个数的下标为x1 和 x2 (x1 < x2),最大值可能是x1,也可能是x2,无所谓,因为只要能删掉这两个数就行,不关心顺序共三种情况:都从左边删;都从右边删;x1从左边删,x2从右边删因此,最后的答案就是三者取最小int main(){ int T; scanf("%d", &T); while(T--){ int原创 2021-07-20 17:55:03 · 133 阅读 · 0 评论 -
POJ 3723 Conscription (最小生成树)
题目链接题目大意:解题思路:本题最大干扰是男女配对,其实这个条件一点用都没有,不要想复杂了(想成了二分图,我一开始就是这么想的。。。。)题目要求招募n个女兵,m个男兵;但是一共就n个女兵,m个男兵,也就是说全都招募了解法很明显,让(10000 - di)求和最小,也就是边权di求和最大,就是“最大生成树“;那么就来实现一下最大生成树算法就行!最大生成树算法(其实就是最小生成树的变种)把表达式变形一下就是 10000 * (n + m) + (-d1 - d2 - d3 - d4 -原创 2021-07-04 20:24:40 · 254 阅读 · 3 评论 -
Leetcode 1486. XOR Operation in an Array(数组异或操作) (题目 + 详解 + C++代码)
题目描述:Given an integer n and an integer start.Define an array nums where nums[i] = start + 2*i (0-indexed) and n == nums.length.Return the bitwise XOR of all elements of nums.Input: n = 5, start = 0Output: 8Explanation: Array nums is equal to[0, 2, 4原创 2021-05-07 10:37:59 · 225 阅读 · 0 评论 -
POJ 3255 Roadblocks (正反建图,两次dijkstra)
题目大意:解析:次短路其实就是最短路换掉某条边因此,我们可以先跑一次dijkstra,求出1-n的最短路。然后反向建图,再跑一次dijksta(起点为n),求出任意一点到n的最短路(关键步骤,得想明白为什么反向建图跑一次dijkstra得到的 是任意一点到n的最短路)再枚举每一条边(设端点为u和v),那么可以求出 1-u-v-n 这条路径的长度次短路就是上述所有路径中大于最短路的最短的那一条代码:#include<bits/std...原创 2021-04-01 20:29:47 · 258 阅读 · 0 评论 -
洛谷 P2574 XOR的艺术 【线段树】 (题目 + 代码 + 详细注释)
题目:Question:一段01序列,多次反转[l, r]区间内的数字,即(0 -> 1, 1 -> 0),然后询问某个区间内1的个数Analyse:显然是一道“区间修改,区间查询”的问题,因此我们可以用线段树来做。而这道题比较特殊,每个位置的数只有0或1,那么区间内部1的个数就是区间和(这个懂了就好写代码了);因此,这道题实际上就是求区间和Difficulty:反转区间时怎么记录Solution:我们可以用懒标记记录每个区间的反转次数。如果标记次...原创 2021-03-06 10:51:00 · 309 阅读 · 1 评论 -
洛谷P4017 最大食物链计数(题目 + 代码 + 详解)
https://www.luogu.com.cn/problem/P4017#include<bits/stdc++.h> using namespace std;#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)typedef long long LL;typedef unsigned long long ULL; typedef pair<int, int>PII;typ..原创 2021-02-28 15:15:05 · 373 阅读 · 0 评论 -
高精度算法 (速用板子)
绪论: 对于加减乘除运算,但是有时候某个数的位数过大,超过了long long,就不能用某个变量存储了,这时候就得用数组存储数字的每一位,然后进行运算。 下面主要介绍四种高精度运算: 高精度 + 高精度 高精度 - 高精度 高精度 * 低精度 高精度 / 低精度首先是数据处理:输入:读入字符串,然后把每一位存储在数组中(本文用到STL中的vector) 注意:是逆序存储,因为加减乘运算都是从低位开始的,把数的低位放在数组的前面更方便运算,因为如...原创 2020-09-18 18:07:06 · 391 阅读 · 0 评论 -
PAT乙级1017 计算 A/B(20分),其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。(C语言 + 详细注释)
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。输入格式:输入在一行中依次给出 A 和 B,中间以 1 空格分隔。输出格式:在一行中依次输出 Q 和 R,中间以 1 空格分隔。输入样例:123456789050987654321 7输出样例:1763668415014109347...原创 2020-01-19 11:05:15 · 2146 阅读 · 1 评论 -
PAT甲级 A1066 Root of AVL Tree (25point(s))
题目:传送门An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4 il..原创 2020-11-20 10:01:15 · 151 阅读 · 0 评论 -
并查集 (全家桶板子)
前言:并查集是用来解决 “朋友的朋友也是朋友” 类的问题,其实写三个函数就能解决大部分题//判断任意两个元素是否属于同一个圈子 if(findfa(x)== findfa(y)) printf("Y\n"); else printf("N\n");//重点的三个函数(核心部分)int fa[N];void init(){ //初始化 for(int i = 0; i < N; i++) fa[i] = i;}int .原创 2020-09-26 14:34:41 · 135 阅读 · 0 评论 -
洛谷 P1658 购物(题目+ 代码 + 详细注释) 【贪心】
题目链接:https://www.luogu.com.cn/problem/P1658题目描述你就要去购物了,现在你手上有N种不同面值的硬币,每种硬币有无限多个。为了方便购物,你希望带尽量少的硬币,但要能组合出1到X之间的任意值。输入格式第一行两个数X、N,以下N个数,表示每种硬币的面值。【数据规模】对于30%的数据,满足N≤3,X≤20;对于100%的数据,满足N≤10,X≤1000.输出格式最少需要携带的硬币个数,如果无解输出-1.输入输出样例输入 #1.原创 2020-07-14 10:55:15 · 687 阅读 · 0 评论 -
洛谷 P1098字符串的展开 (题目 + 代码 + 详细注释)
题目链接:https://www.luogu.com.cn/problem/P1098题目描述在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678"。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:(1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了原创 2020-07-10 11:31:43 · 373 阅读 · 0 评论 -
洛谷P1072 Hankson 的趣味题 (题目 + 代码 + 详细注释)
题目链接:https://www.luogu.com.cn/problem/P1072题目描述Hanks 博士是 BT(Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson。现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题。今天在课堂上,老师讲解了如何求两个正整数c_1c1和c_2c2的最大公约数和最小公倍数。现在 Hankson 认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正...原创 2020-07-06 22:52:03 · 1009 阅读 · 0 评论 -
洛谷 P1042 乒乓球 (题目+ 代码 + 详细注释 + 坑点分析)
题目链接:1042 乒乓球题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中1111分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白1111分制和2121分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。题目描述华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在1111分制和2.原创 2020-07-06 18:12:50 · 1212 阅读 · 0 评论 -
洛谷P1087.FBI树 (题目 + 代码 + 详细注释)
我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:T的根结点为R,其类型与串S的类型相同; 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。 现在给定一个长度为2^N的“01”串,请用上述构造方法原创 2020-07-06 17:24:56 · 514 阅读 · 0 评论 -
【模拟】洛谷P1190 接水问题 (题目 + 代码 + 详细注释)
学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。 现在有n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从1到n 编号,i 号同学的接水量为wi。接水开始时,1 到m 号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学j 完成其接水量要求wj 后,下一名排队等候接水的同学k马上接替j 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即j 同学第x 秒结束时完成接水,则k 同学第x+1 秒立刻开始接水。若当前接水人原创 2020-07-06 16:15:49 · 485 阅读 · 0 评论 -
PAT甲级 A1049 Counting Ones (30分) (题目 + 代码 + 详细注释)
The task is simple: given any positive integerN, you are supposed to count the total number of 1's in the decimal form of the integers from 1 toN. For example, givenNbeing 12, there are five 1's in 1, 10, 11, and 12.Input Specification:Each input f...原创 2020-07-06 14:57:34 · 858 阅读 · 0 评论 -
PTA7-4 后缀式求值 (25分) (题目 + 代码 + 详细注释 + 坑点分析)
我们人类习惯于书写“中缀式”,如3 + 5 * 2,其值为13。 (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?)而计算机更加习惯“后缀式”(也叫“逆波兰式”,Reverse Polish Notation)。上述中缀式对应的后缀式是:3 5 2 * +现在,请对输入的后缀式进行求值。输入格式:在一行中输入一个后缀式,运算数和运算符之间用空格分隔,运算数长度不超过6位,运算符仅有+ - * /四种。输出格式:在一行中输出后缀式的值,保留一位小数。输入样例:...原创 2020-06-11 22:12:45 · 4706 阅读 · 2 评论 -
【堆排序 + 插入排序】PAT A1098 Insertion or Heap Sort (25分) (题目 + 代码 + 详细注释 + 测试点4分析)
题目如下:According to Wikipedia:Insertion sortiterates, consuming one input element each repetition, and growing a sorted output list. Each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted .原创 2020-05-13 23:05:13 · 432 阅读 · 0 评论 -
Codeup 1919A 问题A:二叉排序树(附坑点分析)
问题 A: 二叉排序树时间限制:1 Sec内存限制:32 MB题目描述输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。输入输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。输出可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一...原创 2020-05-06 22:54:00 · 252 阅读 · 0 评论 -
【贪心+优先队列】POJ-2431 Expedition (题目 + 代码 + 详细注释)
题目太长,就直接给个链接了:Expedition题意:一辆车要到某个地方去,每走一单位距离耗一单位油,中途有若干加油站,求加油的最小次数。思路:建一个优先队列,在还没到达目的地时,执行一下操作:把当前能到达的所有加油站放入这个队列(油量大的加油站优先级高),没油时,就把队首元素取出并加油;如果队列为空,即没地方加油了,那么就到达不了目的地了!代码及注释://#i...原创 2020-05-04 15:48:18 · 319 阅读 · 0 评论 -
【优先队列】UVA - 10954 Add All (题目 + 代码 + 详细注释)
题目:(1)题目大意:给定一个集合(包含n个数),每次拿两个求和,记为Si,再把Si放入这个集合,依次类推,把n个数加完为止,要求输出的最小值(2)思路:每次选取最小的两个值相加,这样求得的结果最小(3)实现方法:1、每次把Si放入集合后,就排序一次(次数太多,会超时) 2、用优先队列(4)代码:#include<bits/stdc++.h>using...原创 2020-05-04 13:17:11 · 271 阅读 · 0 评论 -
【深搜dfs】Codeup (算法笔记) 出栈序列统计(题目 + 代码 + 详细注释)
题目描述栈是常用的一种数据结构,有n令元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。你已经知道栈的操作有两•种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出。现在要使用这两种操作,由一个操作序列可以得到一系列的输出序列。请你编程求出对于给定的n,计算并输出由操作数序列1,2,…,n,经过一系列操作可能得到的输出序列总数。输入一个整数n(1<=n<=1...原创 2020-04-23 22:53:55 · 321 阅读 · 0 评论 -
6-6 十进制转换二进制(递归实现) (15分)
本题要求实现一个函数,将正整数n转换为二进制后输出。函数接口定义:void dectobin( int n );函数dectobin应在一行中打印出二进制的n。建议用递归实现。裁判测试程序样例:#include <stdio.h>void dectobin( int n );int main(){ int n; scanf("%d"...原创 2020-04-01 22:28:08 · 4852 阅读 · 1 评论 -
6-5 递归求Fabonacci数列 (10分)
本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:f(n)=f(n−2)+f(n−1)(n≥2),其中f(0)=0,f(1)=1。函数接口定义:int f( int n );函数f应返回第n个Fabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。裁判测试程序样例:#include <stdio.h>int...原创 2020-04-01 22:24:38 · 1367 阅读 · 0 评论 -
6-4 递归求简单交错幂级数的部分和 (15分)
本题要求实现一个函数,计算下列简单交错幂级数的部分和:f(x,n)=x−x2+x3−x4+⋯+(−1)n−1xn函数接口定义:double fn( double x, int n );其中题目保证传入的n是正整数,并且输入输出都在双精度范围内。函数fn应返回上述级数的部分和。建议尝试用递归实现。裁判测试程序样例:#include &...原创 2020-04-01 22:23:28 · 1070 阅读 · 0 评论 -
6-3 递归实现指数函数 (15分)
本题要求实现一个计算xn(n≥1)的函数。函数接口定义:double calc_pow( double x, int n );函数calc_pow应返回x的n次幂的值。建议用递归实现。题目保证结果在双精度范围内。裁判测试程序样例:#include <stdio.h>double calc_pow( double x, int n );int ma...原创 2020-04-01 22:20:56 · 2681 阅读 · 0 评论 -
6-2 递归求阶乘和 (15分)
本题要求实现一个计算非负整数阶乘的简单函数,并利用该函数求 1!+2!+3!+...+n! 的值。函数接口定义:double fact( int n );double factsum( int n );函数fact应返回n的阶乘,建议用递归实现。函数factsum应返回 1!+2!+...+n! 的值。题目保证输入输出在双精度范围内。裁判测试程序样例:#include ...原创 2020-04-01 22:19:36 · 3372 阅读 · 0 评论 -
6-1 计算1~n之和(递归实现)
本题要求实现一个用递归计算1+2+3+…+n的和的简单函数。int sum( int n ){ if(n < 1) return 0; return n + sum(n - 1);}原创 2020-04-01 22:16:06 · 579 阅读 · 0 评论 -
【高精度】蓝桥杯 BASIC-30 阶乘计算 (附详细注释)
试题 基础练习 阶乘计算提交此题资源限制时间限制:1.0s 内存限制:512.0MB问题描述 输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。 将a乘以一个整数k变为将...原创 2020-03-17 23:47:08 · 731 阅读 · 0 评论 -
PAT 乙级 B1045 快速排序 (25分) ---- (详细注释)
著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的N个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元?例如给定 $N = 5$, 排列是1、3、2、4、5。则:1 的左边没有元素,右边的元素都比它大,所以它可能是主元; 尽管 3 的左边元素都比它小,但其右...原创 2020-03-13 22:21:32 · 235 阅读 · 0 评论 -
PAT甲级 A1044 Shopping in Mars (25分) (题目 + 代码 + 详细注释)
Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diamond has a value (in Mars dollars M$). When making the payment, the chain can be cut at any position ...原创 2020-03-12 23:15:55 · 467 阅读 · 0 评论 -
PAT甲级 A1037 Magic Coupon (25分) ---(题目 + 代码 + 详细注释)
The magic shop in Mars is offering some magic coupons. Each coupon has an integerNprinted on it, meaning that when you use this coupon with a product, you may getNtimes the value of that product b...原创 2020-03-09 16:19:43 · 218 阅读 · 0 评论 -
PAT甲级A1005 Spell It Right (20分) (题目+ 代码 + 详细注释)
Given a non-negative integerN, your task is to compute the sum of all the digits ofN, and output every digit of the sum in English.Input Specification:Each input file contains one test case. Eac...原创 2020-03-03 21:30:45 · 247 阅读 · 1 评论 -
PAT甲级 A1001 A+B Format (20分) (题目 + 代码 + 详细注释 + 两种方法实现 )
Calculatea+band output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).Input Specification:Each input ...原创 2020-03-03 21:04:32 · 333 阅读 · 1 评论