算法题
文章平均质量分 63
平时训练的题的思路总结和记录
acwink
这个作者很懒,什么都没留下…
展开
-
[蓝桥杯2018决赛]版本分支
倍增理解https://blog.csdn.net/jarjingx/article/details/8180560倍增求LCAhttps://blog.csdn.net/wjh2622075127/article/details/81060586import java.util.*;public class Main { static final int N = (int)1e5 + 5; static int n, m, idx; static int[] h = n原创 2021-03-24 21:05:27 · 177 阅读 · 0 评论 -
分巧克力
分巧克力文章目录分巧克力题目描述思路分析解题代码JavaC++题目描述儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有 N 块巧克力,其中第 i 块是 Hi×Wi 的方格组成的长方形。为了公平起见,小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足:形状是正方形,边长是整数大小相同例如一块 6×5 的巧克力可以切出 6 块 2×2 的巧克力或者 2块 3×3 的巧克力。当然小朋友们都希望得到的巧克力尽可能大,你能帮原创 2021-01-22 22:48:23 · 157 阅读 · 0 评论 -
减绳子 [二分查找]
减绳子文章目录减绳子题目描述思路分析解题代码JavaC++题目描述有N根绳子,第i根绳子长度为LiLi,现在需要M根等长的绳子,你可以对N根绳子进行任意裁剪(不能拼接),请你帮忙计算出这M根绳子最长的长度是多少。输入格式第一行包含2个正整数N、M,表示原始绳子的数量和需求绳子的数量。第二行包含N个整数,其中第 i 个整数Li表示第 i 根绳子的长度。输出格式输出一个数字,表示裁剪后最长的长度,保留两位小数。数据范围1≤N,M≤1000000<Li<10e9输入样例:3原创 2021-01-21 23:26:27 · 178 阅读 · 0 评论 -
[补题]牛客练习56,迷宫【orz】
先上题:思路:别被题目下到,其实就是一个dp,首先要对题目进行分析。可得:1. 它不会向左走, 因为向左走后,右边的格子就空了,那么就又要向右走,它就在这终老。2. 不会向上走,因为向上走,就说明右边不通,就说明其当前一定是向右走一段后或者向下走过一段,如果向下走过一段,那么走上去没有意义。如果向右走过一段,可以先向左走。综上所述: 臭牛牛就只能向下和向右,最后才能逃出迷宫,...原创 2020-02-29 00:14:00 · 110 阅读 · 0 评论 -
[蓝桥杯2015初赛]移动距离【数学【曼哈顿距离】】
思路:利用其是每一排的数字,找出其中的规律。一定不要着急,不然就找不出来啦。1261: [蓝桥杯2015初赛]移动距离...原创 2020-02-08 17:26:00 · 131 阅读 · 0 评论 -
小A与小姐姐给气球涂色[dp + 快速幂]
小A与小姐姐给气球涂色时间限制:1 sec 内存限制:128 MB提交:2 正确:1题目描述小A与小姐姐闲的无聊,它们路过一家商店,看见里面有很多无色的气球,于是他们突然有一个想法,自己买气球,把气球涂成不同的颜色,然后送给商店旁边小学里小朋友。他们买了n只气球,m中涂料,他们把气球排成一排,他们送给小朋友的气球的顺序也是排列的顺序。初始时,气球的都是无色的,现...原创 2020-02-09 10:58:00 · 236 阅读 · 0 评论 -
利用费马小定理求逆元
关于费马小定理:https://www.cnblogs.com/rstz/p/12359948.html 1 #include <iostream> 2 #define mod 1000000007 3 using namespace std; 4 5 long long ksm(long long a, long long n){ 6 l...原创 2020-03-01 16:47:00 · 273 阅读 · 0 评论 -
【补题】牛客58矩阵消除【数据水的一匹,算法:二进制枚举】
二进制枚举参见:https://blog.csdn.net/sugarbliss/article/details/81099340位运算:https://baike.baidu.com/item/%E4%BD%8D%E8%BF%90%E7%AE%97本题:数据太水,假算法也能过。先上一个我都不知到为能过得算法: 1 #include <iostream> 2 #incl...原创 2020-02-29 13:25:00 · 142 阅读 · 0 评论 -
【补题】牛客58E题(数学)
题意: 就是在区间l, r,中找gcd(ai, x)的最大值首先,可以知道gcd(ai, x),必定是ai和x的约数,对吧。所以我们可以将每个ai的约数找出来,用vector<int> 的数组 value[i].push_back(id),表示aid有一个约数为i, 所以将id存入。然后对x同理求约数,将它的约数找在l,r区间相等且最大的数。输出这个数,就是答案。...原创 2020-02-29 12:11:00 · 99 阅读 · 0 评论 -
哈密尔顿环
定义:指的是不重复走过所有的点。并且最后还能回到起点的路。简单的深度优先搜索就能求出一张图中所有的哈密尔顿环 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 5 using namespace std; 6 int start, length...原创 2020-02-27 22:11:00 · 367 阅读 · 0 评论 -
三个最短路算法
最短路径算法Floyed-Warshall O(N3)算法描述: a.初始化:如果点u,和v有相连的边则第dis[u][v] = dis[v][u] = distance; 如果不相连则等于无穷大。 b.核心代码 (实用于负的权值) ``` 1 for (int k = 1; k <= n; ++ k) 2 ...原创 2020-02-27 22:02:00 · 267 阅读 · 0 评论 -
最大子列和问题
给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序...原创 2020-02-27 20:46:00 · 77 阅读 · 0 评论 -
最小生成树应用解(超时)蓝桥杯2015初赛]灾后重建
1 #include <iostream> 2 #include <algorithm> 3 #include <set> 4 using namespace std; 5 constexpr size_t maxn = 2e5+1; 6 int n, m, q; 7 struct Edge{ 8 int from, ...原创 2020-02-27 20:03:00 · 258 阅读 · 0 评论 -
c++11的记录
decltype()类型指示符 设定一个返回值是int的函数f(),通过使用 1 decltype(f()) sum = x;此时decltype()接受一个从f()返回的int型的值,并将sum设置为int型。auto自动类型用auto遍历二维数组 1 #include <bits/stdc++.h> 2 using namespace std; 3 int m...原创 2020-02-27 10:06:00 · 90 阅读 · 0 评论 -
费马小定理
原创 2020-02-25 08:32:00 · 81 阅读 · 0 评论 -
[蓝桥杯2015决赛]穿越雷区(BFS求最短路)
题目描述X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。例如:A + - + -- + - - +- + + + -+ - + - +B + - + -坦克...原创 2020-02-24 09:58:00 · 123 阅读 · 0 评论 -
[蓝桥杯2015初赛]生命之树(树状dp)
在X森林里,上帝创建了生命之树。他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列 {a, v1, v2, …, vk, b} 使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连。在这个前提下,上帝要使得S中的点所对应的整数的和尽量大。这个最大的和就是...原创 2020-02-23 20:18:00 · 246 阅读 · 0 评论 -
[蓝桥杯2015决赛]四阶幻方(DFS + 剪枝)
题目描述把1~16的数字填入4x4的方格中,使得行、列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方。四阶幻方可能有很多方案。如果固定左上角为1,请计算一共有多少种方案。比如:1 2 15 1612 14 3 513 7 10 48 11 6 91 12 13 82 14 7 1115 3 10 616 5 4 9就可以算为两...原创 2020-02-23 20:16:00 · 308 阅读 · 0 评论 -
判断两个二叉树是否相同
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要...原创 2020-02-28 11:30:00 · 310 阅读 · 0 评论 -
遇到一道扩展欧几里得题(个人觉得)
但是他们说是同余最短路问题 ,我不知道这个算法,以后在学吧。题目:https://ac.nowcoder.com/acm/contest/4853/D 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 using ll = long long; 5 void...原创 2020-03-30 14:09:00 · 113 阅读 · 0 评论 -
会话(服务端)和Cookies(客服端)
引:在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面只有登录之后才可以访问 ,而 且登录之后可以连续访问很多次网站,但是有时候过一段时间就需要重新登录。 还有一些网站,在打 开浏览器时就向动登录了,而且很长时间都不会失效,这种情况又是为什么?静态网页和动态网页静态网页:不能根据URL的变化显示内容等。 动态网页:可以随着URL的改变改变页面(动态解析URL)如让主机成一台...原创 2020-03-28 14:48:00 · 121 阅读 · 0 评论 -
归并排序的应用
先将其排序,后进行比赛会发现,赢得还是按分手从大到小, 输得也是,固然可以想到归并排序,将两个有序的数组和并。归并排序参考:https://www.cnblogs.com/rstz/p/12393223.html 1 #include <iostream> 2 #include <algorithm> 3 #include <string>...原创 2020-03-08 10:01:00 · 100 阅读 · 0 评论 -
单词方阵【DFS】
1 #include <bits/stdc++.h> 2 using namespace std; 3 constexpr size_t maxn = 105; 4 int dx[9]={1,0,1,-1,0,-1,1,-1};//八个方位 5 int dy[9]={0,1,1,0,-1,-1,-1,1}; 6 char mp[maxn][maxn]...原创 2020-03-09 19:36:00 · 161 阅读 · 0 评论 -
求后倒零
题目:求N!末尾有多少个零。题目分析:一般先想到的是算出N!然后在对其求余,没错会爆,数据是以指数型增长。但是这个时候又可以想到,因为N!是十进制,所以每有一队 2,5就可以生一个零。所以我们只需要统计2和5的个数然后取最小就可以得到后倒零。 1 #include <iostream> 2 #include <algorithm> 3 using nam...原创 2020-03-07 19:37:00 · 212 阅读 · 0 评论 -
n个最小和【贪心思想,利用堆维护】
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <queue> 5 using namespace std; 6 typedef long long LL; 7 struct node{ 8 int ...原创 2020-03-04 18:09:00 · 114 阅读 · 0 评论 -
植物大战僵尸【二分答案, 加贪心思想】
由于本题得数据范围大,所以不能去一个去枚举用到二分答案,考虑当前得这个植物要它大大于等于mid, 所以就相当于来回跳,跳的同时它得下以个植物防御也在增加。所以tempn = temp – 1(if它每满足大与等于mid)。满足就只有temp= 1,它到这里用得一天, 而并每有到下一个植物所以tempn = 0;统计天数,比较。 1 #include <iostream> ...原创 2020-03-03 13:15:00 · 205 阅读 · 0 评论 -
[蓝桥杯2016初赛]剪邮票【全排列,连通块】
题目描述如下图, 有12张连在一起的12生肖的邮票。现在你要从中剪下5张来,要求必须是连着的。(仅仅连接一个角不算相连)比如,下面两张图中,粉红色所示部分就是合格的剪取。请你计算,一共有多少种不同的剪取方法。这个题是个填空题, 我想许多人可能和我一样,会用深度优先搜索做。但是像这种枚举每一个点,来索索,得出的结果是错的,因为其中有重复的元素。而且这样取出来的邮票一般是L型;接下来介绍,全...原创 2020-03-02 22:10:00 · 426 阅读 · 0 评论 -
数字游戏【后缀积问题,一个数学分析问题】
此题着重考虑每加上一个数会对,前面得-+0产生什么样的影响。分析可知插入0为特殊点。然后就可以通过代码实现。1 1 0 1 3 41 -1等模拟运行下就能法现其规律。 1 #include <algorithm> 2 #include <iostream> 3 #include <cstring> 4 5 using namespa...原创 2020-03-03 00:03:00 · 104 阅读 · 0 评论 -
火星救[数学,一点前缀和]
本题是个数学推理 ,我们先要保证剩下的车油都是满的,所以每当报废一辆车,剩余的车要保证是油满的。那么就推出来了每当行驶s/n(n = 1 ….n),公里报废一辆..。由于数据量大暴力的话必超时,那么就要用前缀和的一点知识附上代码: 1 #include <cstdio> 2 3 long double a[1000005]; 4 int main(){ 5...原创 2020-03-02 00:41:00 · 102 阅读 · 0 评论 -
np背包问题【算法:折半枚举】
先看题吧我猜到多数人开始想的就是二进制暴力枚举,对吧,这题这样做可以因为只需要提交答案,完全可以本地暴力,1e9的数据。需要一分钟左右。代码:这里我就不说着种方法了。这题我们可以用,折半枚举。优点:就是能够将时间复杂度降下来,将2^30 变为 2^15 + 2^15解决这题仅仅用了不到1s的时间代码也 相当于模板 1 #include <algorithm> 2 #in...原创 2020-03-01 23:30:00 · 413 阅读 · 0 评论 -
bfs求最短路径
好久没写搜索,到忘了,找了半个小时错误。一开始又把题看错了,真服自己了。(认真审题)这题可以用excel写。but作为一个程序园,那就要使用灵魂操作。核心算法:bfs层次遍历 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 string s[35]; 5 int vist[35][55];//标记...原创 2020-03-01 21:04:00 · 442 阅读 · 0 评论 -
题目盲人摸象【dfs,bfs, 顺序遍历】
此题就是方向遍历,始终是想遍历左手所指得位置,或右手所指得位置。也就是一个遍历数组得顺序问题 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <queue> 5 using namespace std; 6 ...原创 2020-03-03 12:06:00 · 146 阅读 · 0 评论 -
雷达设备【问题转化+区间贪心】
根据题意,可以知道也就是有k个区间,要求每个区间至少包含一个点,也就是把陆地这个点转化成区间,如图所示,只要雷达在这交线上结果就成立,也就是可以覆盖到陆地。所以问题就转化求k个区间每个区间至少包含一个点,求最少需要多少个点。算法步骤:1.通过勾股定理算出区间范围,len = sqrt(R*R – y*y), 左端点x – len, 右端点x + len.2.然后将区间按右端点从小到大排序...原创 2020-04-15 01:23:00 · 167 阅读 · 0 评论 -
防晒【贪心 + 平衡树】
证明不会:yxc说要用匈牙利算法,来确定增广路径;算法步骤:1.将牛按minspf从大到小排序2.每次取出满足当前条件,最大的spf。因为是按开始从大到小排序,所以假设x, y防晒,spfs[x] < spfs[y], 那么可能后面的牛能用到x,y,或者只用到x,或者都用不上。因为后面的牛可能可以用x,所以当前这头牛应该选择在它适合的范围最大的spf。所以结论成立。代码 1 #i...原创 2020-04-14 23:59:00 · 157 阅读 · 0 评论 -
畜栏预定【贪心+小根堆】
毫无疑问这是一个贪心思想, 应该是活动安排那个题的拓展,本题的做法是:1.将所有牛按开始吃草的时间排序2.用小根堆维护当前所有畜栏的最后一头牛吃草结束的时间3.如果当前的牛可以安排在堆顶畜栏,则将其安排进去,否则创建以个新的畜栏反证法,假设存在一种方案,使得需要的畜栏数量更少,记其需要的畜栏数量是 m。考虑在上述做法中,第一次新建第 m+1 个畜栏的时刻,不妨设当前处理的是第 i头牛。...原创 2020-04-14 23:49:00 · 155 阅读 · 0 评论 -
货仓选址【中位数】证明
假设货仓左边所有点到仓库的距离是p, 右边是q, 总距离p+q, 由题可知,要让总距离最小,当仓库向左移动 p – x, 而 但是q会增加n−x,所以说当为仓库中位数的时候,p+qp+q最小。还是同样的一句话,画图理解很重要。 1 #include <iostream> 2 #include <algorithm> 3 using namespace s...原创 2020-04-14 09:58:00 · 268 阅读 · 0 评论 -
电影【离散化】
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int MAX = 200010; 5 int n,mm; 6 unordered_map<int, int> m;//无序map减少时间复杂度logn 7 8 struct node { 9 int...原创 2020-04-14 09:40:00 · 182 阅读 · 0 评论 -
约数之和(两种方法)
也可以直接用等比树列求和公式,乘上逆元分治: 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 using namespace std; 5 6 using ll = long long; 7 const int Mod ...原创 2020-04-12 18:56:00 · 1284 阅读 · 0 评论 -
最佳牛栏(前缀和+二分)
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 const int N = 1e5 + 5; 5 double sum[N], cows[N]; 6 int n, f; 7 8 bool check(double avg){ 9 ...原创 2020-04-13 10:37:00 · 318 阅读 · 0 评论 -
分形之城(递归)
题目:分析一般这种题都有一定得规律,根据观察可以发现, N = 2,是复制或复制旋转才得到结果。这里先说一下线性代数中旋转后的坐标计算公式\运用矩阵乘法计算旋转后的(x , y)然后就进行如图所示的操作由于图片过大无法放大,所以查看图片请访问:https://img2020.cnblogs.com/blog/1938255/202004/1938255-202...原创 2020-04-13 01:36:00 · 307 阅读 · 0 评论