刷题集
文章平均质量分 61
polarday.
须知少时凌云志,曾许人间第一流。
展开
-
2022年十三届蓝桥杯国赛(C/C++大学B组)个人题解
去年国赛基本都是暴力,最后国三都没拿到(我是废物 ),今年感觉比去年难了不少,而且时间没有安排好,第一题就被卡了好久,然后G题概率论也分析了好久,导致最后三题都没时间做了,总之就是一点暴力分都没骗到,希望做的题能多对几道吧,希望能拿个国三。10个循环暴力明显超时,有一点思路大概是最小数的范围在0-197之间,可能需要根据数的范围来做?然后就不会了。枚举时分秒,分别计算秒针、分针、时针与0时的夹角度数秒针的夹角度数为:360 * m / 60;(一圈360度,秒针转了m / 60圈)分针的夹角度数为:36原创 2022-06-19 13:16:34 · 22860 阅读 · 38 评论 -
AcWing1986. 镜子(模拟/向量)
题目链接题目分析小模拟题,第一遍做的时候越做越复杂,看了y总的题解,发现y总的这种做题方法还蛮不错的,条理清晰,先在main函数中把代码的总体框架敲好,比较复杂或者使用比较多的方法写成函数,这里的函数可以先不去声明,直接在main函数中写,等main函数的总体框架写完之后再去完善其他的函数总体思路本题的N最大只有200,判断时间复杂度可以到达O(N3)我们首先枚举要变换的镜子然后镜子最多只会反射2*(n+1)次然后再遍历所有镜子找到在当前镜子的方向上距离最近的那个总的时间复杂度为O(N3)原创 2022-04-29 23:26:12 · 281 阅读 · 0 评论 -
Codeforces Reverse Sort
B. Reverse Sort第一次打codeforces,就做了一道签到题,这道题在看的时候以为挺简单的,看到好多人都出来了,自己想了好久也没做出来,还是看了大佬的解法才有的思路,我还是太菜了。题目:大概意思就是给一个01字符串,每次操作可以从中选一个子串做一个翻转然后放回原来的位置,问最小经过几次操作可以让字符串变为非递减的字符串(0都在1的前面)分析总可以通过一次操作解决(太妙了,当时没想到,我是废物)我们可以对字符串的0,1进行一个统计,总可以找到一个位置,使得这个位置之前的1的数目原创 2021-11-14 19:41:18 · 597 阅读 · 0 评论 -
UVA1601 The Morning after Halloween
UVA1601 The Morning after Halloween题目链接做这道题的时候看到一个写的很好的代码,在这里保存下来,以便以后学习。题目分析这道题和普通的bfs有所不同,解题方法也有些差别,主要是这里有三个移动的“小鬼”,每个小鬼有五种移动状态(上下左右和不动),最主要的是可以看出在地图上大部分的点都是障碍物,所以可以把所有的空格都提出来建立一张图,而不必每次判断五种方法是否合法,以此来优化算法。代码解析本题代码中用到的变量较多,为便于理解,先把主要变量的含义解释一下。x[i]原创 2021-03-22 20:56:43 · 119 阅读 · 0 评论 -
UVA1025 A Spy in the Metro
UVA1025 A Spy in the Metro题目链接刚开始接触DP题,感觉还是有一定的难度,在这里再理一遍思路。DP的核心就是状态和状态转移方程首先状态的确定就是找到影响当前决策的因素,本题是当前时间和所处车站两个,所以可以用d[i][j]表示i时刻在j站最少还要等待的时间。其次是状态转移方程,取决于决策的形式,本题主要有以下三种决策:1.在当前车站等待一分钟。2.搭乘向右开的车。3.搭乘向左开的车。找出决策后即可列出相对应的状态转移方程。1.dp[i][j]=min(dp[i]原创 2021-05-21 21:43:19 · 187 阅读 · 0 评论 -
UVA1614 Hell on the Markets
UVA1614 Hell on the Markets题目传送门这道题主要考察的数学推理能力,一点思路都没有,大佬的分析都看了好久。这道题主要用到的是数学归纳法,用sum[i]表示前i项的和,从1到sum[i]之间的任意一个数,都可以用a[1]到a[i]中的若干个数表示出来。具体证明方法以及选数的方法可以看下面这篇文章https://blog.csdn.net/weixin_30820151/article/details/101380416代码#include<iostream>转载 2021-05-08 22:50:11 · 153 阅读 · 0 评论 -
UVA11212 Editing a Book(编辑书稿)
UVA11212 Editing a Book题目链接这道题有一定的难度,参考了一些大佬的代码,在这里写一篇题解巩固一下。问题分析首先,本题采用IDA*算法求解,参考紫皮书上的解释,这道题启发函数的求解是解题的一个关键。其次是三个加速的策略:1.每次只剪切一段连续的数字。2.假设剪切片段的第一个数字为a,最后一个数字为b,这个片段要么粘贴到a-1下一个位置,要么粘贴到b+1的前一个位置。3.已经排好序的数字不要分开剪切,始终看做一个整体。(以上解释纯属搬书,下面结合代码具体分析)最后,启原创 2021-03-22 20:37:55 · 277 阅读 · 0 评论 -
UVA1347 Tour
2021.5.22刷题的时候突然看到手机推送,袁隆平院士逝世,心中一颤,后来得到辟谣,心情稍微放松几分,正在刷着辟谣的文章时,央视新闻发文,13点07分,袁隆平院士逝世,没过多久又看到吴孟超院士逝世的新闻,心情难以平复,特在本文的开头,向两位院士致敬。历史浩荡,国士无双。UVA1347 Tour题目链接dp题,按照紫书上的分析做下来的,下面主要也是跟着紫书走一遍。题目分析“从左到右再回来”不太方便思考,可以改成:两个人同时从最左点出发,沿着两条不同的路径走,最后都走到最右点,且除了起点和终点外原创 2021-05-22 17:20:37 · 143 阅读 · 0 评论 -
UVA1616 Caravan Robbers
UVA1616 Caravan Robbers题目链接二分+小数转分数题意:给定n个区间,把它们变成等长的不想交的区间,求区间的最大长度。注意本题精度要求较高,注意浮点数的比较方式。思路1.二分通过对题目的分析,我们不难发现,所有小于最大长度的数都满足不相交,所有大于最大长度的数都会相交,满足单调性,可以通过二分来求解最大长度。通过二分来求区间的最大长度,首先选定左端点l=0,右端点r为n各区间中最靠右的点,然后求mid=(r+l)/2,判断此时的mid是否满足各区间不想交,若不满足,则mi原创 2021-05-12 21:33:41 · 190 阅读 · 0 评论 -
UVA11134 Fabled Rooks
UVa11134 Fabled Rooks题目链接问题解析在n行n列的棋盘上放n个车,第i个车在给定的矩形Ri之内,且任意两个车不能相互攻击,即任意两个车不在同一行或同一列。求每个车的位置坐标。首先,一个车所在的行不会影响它所在的列,可以分别求一个车的横坐标和纵坐标,将一个二维的问题转化为一个一维的问题。现在,我们面临的问题是如何将这n个点分给n个车。以横坐标xi为例,每个车的x都被限定在了一个区间[xli,xri]之内,不难看出应该应用贪心算法求解。这里我最开始做的是按照xli从小到大排序,原创 2021-04-02 15:37:37 · 161 阅读 · 0 评论 -
UVA1153 Keep the Customer Satisfied
UVA1153 Keep the Customer Satisfied题目链接第一次做这种题,没有丝毫头绪,查了一下要用优先队列+贪心,在这里再记录一下。题目大概意思就是给定n个区间,求最多不相交的区间个数。解题方法首先将输入按照截止时间从前往后排列,截止时间靠前的肯定要先完成。然后维护一个时间和优先队列,时间就是记录当前工作的时间,优先队列存放已经完成的工作,按照所耗费的时间排序,耗时长的先出队。方法解释我们按照截止时间的升序向优先队列中push,每次向队列中插入元素时,如果插入的工作可以原创 2021-05-10 18:00:27 · 150 阅读 · 0 评论 -
UVA548 紫皮书代码解析
UVA548 紫皮书代码解析刚开始接触二叉树,这道例题的代码花了好长时间才看懂,在这里写一篇关于这个代码的解析,希望能给大家提供一点帮助。先给出题目中所给三组数据对应的二叉树3 2 1 4 5 7 63 1 2 5 6 7 47 8 11 3 5 16 12 188 3 11 7 16 18 12 5255255说明一下代码主要变量的含义in_order[maxv],按输入顺序存储中序遍历的结果。post_order[maxv],按输入顺序存储后序遍历的结果。lch[maxv]原创 2021-03-04 18:09:44 · 341 阅读 · 2 评论 -
UVA437 The Tower of Babylon
UVA437 The Tower of Babylon题目链接动态规划题目有n(n≤30)种立方体,每种都有无穷多个。要求选一些立方体摞成一根尽量高的柱子(可以自行选择哪一条边作为高),使得每个立方体的底面长宽分别严格小于它下方立方体的底面长宽。分析题目中有两句话比较重要,一是每种立方体都有无穷多个,二是可以自行选择哪一条边作为高,所以当输入为n种立方体时,可供我们选择的立方体个数一共是3*n个,每输入一种立方体,对应的就有三种立方体供我们选择(分别以输入的三个数作为高)。然后根据立方体之间能原创 2021-05-22 11:56:48 · 147 阅读 · 0 评论 -
UVA1617 Laptop
UVA1617 Laptop题目链接题意这里引用紫皮书上的解释给定n条长度为1的线段,确定它们的起点,使得第i条线段在[ri,di]之间。输入保证ri≤rj,当且仅当di≤dj,且保证有解。输出空隙数目的最小值。对这个题目有一点疑问,给定的样例中有[1,3]和[0,3]两个区间,假定[1,3]为第i条线段[0,3]为第j条线段,di≤dj,但是ri>dj,不满足题意所述,猜想可能是题目有误(VJ上的题目也是此条件)。思路一道蛮简单的贪心题,首先按照左端点小的在前排序,若左端点相等,则对右原创 2021-05-17 21:12:25 · 199 阅读 · 0 评论 -
UVA1613 K-GraphOddity
UVA1613 K-GraphOddity题目传送门刚看第一眼一点思路都没有,后面看了大佬的题解发现这道题其实是一道水题,用到的方法就是DFS遍历图。我是废物题目意思很简单,就不分析了,下面直接说方法。首先求出k,然后dfs遍历一遍图,给每个点分一个数字即可。这里注意每次dfs判断的是当前结点的所有相邻接点,“分配颜色”时从1到k遍历一遍找到合适的即可。代码#include<iostream>#include<vector>#include<cstring>原创 2021-05-08 21:04:11 · 190 阅读 · 0 评论 -
UVA12166 Equilibrium Mobile
VJ传送门一道思维题,刚开始看的时候没什么思路,在博客园上参考了大佬的解析,在这里总结一下。一、分析这道题要求让天平平衡所需要的最小改动次数,至少有一个不变,我们可以先选定一个不变的基准,然后改变其他的秤砣,得到以此为基准的天平的总重量,如果以深度为d重量为w的秤砣为基准,那么整个天平的重量就是w * pow(2, d),即w << d。当然,可能会有一些秤砣算出的以各自为基准的天平总重量相同,设天平总重量为sumw,那么这些秤砣的数量就表示了如果使天平的总重量为sumw需要使多少个秤砣原创 2021-03-13 16:32:27 · 213 阅读 · 0 评论 -
UVA1615 Highway
UVA1615 Highway题目链接这道题不算难,就是一道贪心题,下面介绍两种方法。第一种方法主要的思路就是在x轴上向右选取距离当前点的长度为D的点,即最靠右的点,这样选可以尽可能的满足后面的点。选点前先将每个点从左向右排序,横坐标相同则从上往下排,这里注意要把纵坐标小的放在后面,因为纵坐标小所选取的点更靠右,如果把纵坐标小的放在前面那么下一个纵坐标大的点距离这个点一定大于D不满足,会多选一个点。(这里表达不太清楚,可以自己画个图看一下)第二种方法主要的思路就是区间选点,每个点在x轴上都有一原创 2021-05-09 12:33:39 · 144 阅读 · 0 评论 -
UVA208 Firetruck
UVA208 Firetruck题目链接刚开始做,有些细节掌握的还不太够,代码写的有些繁琐了,主要还是巩固一下思路,大家随便看看就好了。问题解析这道题理解起来不难,在这里就用紫皮书上的解释输入一个n(n<=20)个结点的无向图以及某个结点k,按照字典序从小到大顺序输出从结点1到结点k的所有路径,要求结点不能重复经过。提示:要事先判断结点1是否可以到达结点k,否则会超时。代码分析首先用BFS判断是否连通然后用DFS寻找路径即可这里要注意一些实现的小细节1.在s输入1后记得把vis[原创 2021-03-26 10:49:26 · 211 阅读 · 0 评论 -
UVA11988 破碎的键盘(悲剧文本)
uva11988 破碎的键盘紫皮书例题6-4刚开始学链表想了好久这道题,做个简单的总结。就用书上的代码#define _CRT_SECURE_NO_WARNINGS#include<bits\stdc++.h>const int maxn = 100000 + 5;int last, cur, next[maxn]; //光标位于cur号字符的后面char s[maxn];int main(){ while (scanf("%s", s + 1) ==1)原创 2021-02-24 15:55:20 · 180 阅读 · 1 评论 -
LeetCode1871 跳跃游戏(dp、前缀和、滑动窗口)
LeetCode1871 跳跃游戏(dp、前缀和、滑动窗口)题目传送门给你一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump 。一开始,你在下标 0 处,且该位置的值一定为 ‘0’ 。当同时满足如下条件时,你可以从下标 i 移动到下标 j 处:i + minJump <= j <= min(i + maxJump, s.length - 1) 且s[j] == ‘0’.如果你可以到达 s 的下标 s.length - 1 处,请你返回 true ,原创 2021-11-04 21:28:22 · 2340 阅读 · 0 评论 -
LeetCode5912. 每一个查询的最大美丽值(排序+优先队列)
LeetCode5912. 每一个查询的最大美丽值(排序+优先队列)题目传送门题目给你一个二维整数数组 items ,其中 items[i] = [pricei, beautyi] 分别表示每一个物品的 价格 和 美丽值 。同时给你一个下标从 0 开始的整数数组 queries 。对于每个查询 queries[j] ,你想求出价格小于等于 queries[j] 的物品中,最大的美丽值 是多少。如果不存在符合条件的物品,那么查询的结果为 0 。请你返回一个长度与 queries 相同的数组 ans原创 2021-11-14 20:38:19 · 436 阅读 · 0 评论 -
LeetCode486.预测赢家(递归+动态规划+博弈)
LeetCode486.预测赢家(递归+动态规划+博弈)题目传送门题目解析给你一个整数数组 nums 。玩家 1 和玩家 2 基于这个数组设计了一个游戏。玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是 0 。每一回合,玩家从数组的任意一端取一个数字(即,nums[0] 或 nums[nums.length - 1]),取到的数字将会从数组中移除(数组长度减 1 )。玩家选中的数字将会加到他的得分上。当数组中没有剩余数字可取时,游戏结束。如果玩家 1 能成原创 2021-11-02 10:44:48 · 4540 阅读 · 0 评论 -
LeetCode519. 随机翻转矩阵
LeetCode519. 随机翻转矩阵题目传送门题目给你一个 m x n 的二元矩阵 matrix ,且所有值被初始化为 0 。请你设计一个算法,随机选取一个满足 matrix[i][j] == 0 的下标 (i, j) ,并将它的值变为 1 。所有满足 matrix[i][j] == 0 的下标 (i, j) 被选取的概率应当均等。尽量最少调用内置的随机函数,并且优化时间和空间复杂度。实现 Solution 类:Solution(int m, int n) 使用二元矩阵的大小 m 和 n 初原创 2021-11-27 17:58:16 · 250 阅读 · 0 评论 -
LeetCode629.K个逆序对数组(dp)
LeetCode629.K个逆序数组(dp)题目传送门给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数。逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < j且 a[i] > a[j],则其为一个逆序对;否则不是。由于答案可能很大,只需要返回 答案 mod 109 + 7 的值。解析本题主要参考的官方题解,但是官方题解有些地方当时理解的时候有些困难,在这里再记录一下,便于理解。官方题解f[i][j]表示长度为原创 2021-11-11 21:32:54 · 685 阅读 · 1 评论 -
LeetCode260.只出现一次的数字 III(位运算)
LeetCode260.只出现一次的数字 III(位运算)题目传送门一、题目解析给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?题意很简单不再赘述,比较容易想到的一种方法是用哈希表来存储每个数字出现的次数,然后遍历一边哈希表找到两个只出现一次的即可,但是本题还要求仅使用常数空间复杂度来实现,此时就需要用到另一种方法——位运算。二原创 2021-10-30 11:48:18 · 270 阅读 · 0 评论 -
AcWing 1912. 里程表(逆向思维)
AcWing 1912. 里程表(逆向思维)题目链接约翰的奶牛正在公路上旅行。他们汽车上的里程表显示的是整数里程值。旅途开始时里程表显示的里程值为 X,旅途结束时里程表显示的里程值为 Y。每当里程表显示“有趣的”数字(包括开始和结束时显示的数字)时,奶牛们就会发出愉快的叫声。如果一个数除去前导零以外的所有数字中,除了一个数字不同以外,其他所有数字都是相同的,那么这个数就是“有趣的”。例如,33323 和 110 是有趣的,而 9779 和 55555 不是有趣的。请帮助约翰计算奶牛们在旅途原创 2022-04-25 21:17:00 · 403 阅读 · 0 评论 -
CSP 202112-3 登机牌条码 (100分详细图解)
CSP 202112-3 登机牌条码题目链接大模拟做这类题首先一定要读懂题目,这种题往往不会有什么很高深的算法,就是对整个过程的一个模拟,一定要完全理解了题目的整个内容之后再开始写代码题目整体可以分为两部分,第一部分是求数据码字,第二部分是求校验码,其中数据码字比较好求,看懂题目跟着题目走就可以了,求出数据码字就可以水40分了,后面的难点在于求校验码,这里我的代码只拿到了60分,但没有找到出错的地方,下面给大家详细写一下我的思路,希望能帮助到大家,如果大家找出了我代码中的错误,还请不吝赐教。数原创 2022-03-11 21:28:40 · 2957 阅读 · 8 评论