
算法
文章平均质量分 51
回过头再去刷一遍简单的算法
江心之人
萌新一枚
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU 6917 Shorten the array(构造)
题目地址原题DescriptionAlice has an array a. The array has N positive numbers. She thinks the array is too long, so she wants to shorten the array. She decides to shorten the array via the following operation: every time she will choose an index i (1≤i<n)原创 2021-04-03 13:01:54 · 656 阅读 · 0 评论 -
HDU2303 The Embarrassed Cryptographer
题目大意要求给定一个数(而且这个数能被分解成两个质数的乘积)的小的那个因子。如果该因子严格小于给定的数字L,那么就说明这个密码很弱(BAD),否则就说这个密码是好的(GOOD)思路概要 & 算法分析先用线性筛搞出1e61e61e6内所有的质数,根据nln(n)\frac{n}{ln(n)}ln(n)n估算素数大约有750007500075000个,然后进行大数取模,使用秦九昭算法时间复杂度O(位数),因为位数最大为100,所以判断一个数XXX是否有YYY内的质因数的时间复杂度就是O(lgx原创 2021-03-20 13:26:57 · 182 阅读 · 0 评论 -
最短路径dijkstra(链式前向星 + 堆优化线段树优化)
模板链接某谷堆优化#include <iostream>#include <string.h>#include <vector>#include <queue>//#include <pair>using namespace std;int n, m, s;const int N = 4e5 + 10;const int INF = 0x3f3f3f3f;int e[N], ne[N], w[N], idx, h[N];原创 2021-03-19 20:36:00 · 233 阅读 · 0 评论 -
计量大学 A A Party for You Started
A A Party for You StartedWelcome to the grand party for CJLUACMerCJLUACMerCJLUACMer, we are glad about your arrival. Before starting, please remind that the difficulty of all the problems is absolutely not relevant to its order of permutation, so please c原创 2020-09-28 09:16:31 · 420 阅读 · 0 评论 -
计量大学 H Happy Time is Always Short
H Happy Time is Always ShortThe happy time is always short. The party comes to an end, and the security guard GYQGYQGYQ can finally rest for a while. He was so miserable in the beginning that he didn't have the energy to complete the final task seriously.原创 2020-09-28 09:10:33 · 403 阅读 · 0 评论 -
计量大学 K1 Known-Well Palindrome Date - Easy Version
K1 Known-Well Palindrome Date - Easy VersionAs time flies by, the composition of our society is always changing. Where the post-1980s and post-1990s generations were almost considered as the era of the past, the reverse is true for the post-1995 and post原创 2020-09-28 09:07:02 · 416 阅读 · 0 评论 -
计量大学 D Dessert Time
D Dessert TimeThe party began, the greasy uncle was playing cards, the fat otaku was eating, and the little beauty was drawing.Because there were too many steaks just grilled, ZJHZJHZJH found that he could not finish it, so he gave some of it to others.原创 2020-09-28 09:03:37 · 303 阅读 · 1 评论 -
计量大学 C Cook Steak
C Cook SteakAfter playing cards for a while, ZJHZJHZJH felt very hungry. He decided to let the automatic kitchen grill steak for him. It can make the kitchen quite busy, because ZJHZJHZJH tastes food very strictly, especially steak!To grilling a steak, Z原创 2020-09-28 08:44:28 · 336 阅读 · 1 评论 -
计量大学 I Isolated Pointset
I Isolated PointsetOn a two-dimensional plane, YHH has a series of isolated points named PointSet, which contains N points in it. YHH would like to know if there is a way to draw a vertical bisector from any two points in the PointSet, passing through at原创 2020-09-28 08:39:12 · 188 阅读 · 0 评论 -
计量大学 F Flag Scramble Competition
F Flag Scramble CompetitionThe party began, the greasy uncle was playing cards, the fat otaku was eating, and the little beauty was drawing.At the party, people will play a game called Flag Scramble. The rule of this game is that the host speaks a senten原创 2020-09-28 08:36:02 · 196 阅读 · 0 评论 -
CodeForces A - Omkar and Password(构造)
题目 链接题目大意两个相邻的数字之间可以合并成他们的和,与此同时序列的数量就会减少一个。问:最少的数量是多少个。简析很明显最少是1个,然后当整个序列不全是相同数的时候,一定可以合并成一种同样序列不完全相同但是个数少一个的情况 (一眼看出来的参考代码#include <bits/stdc++.h>using namespace std;const int N = 200010;int main() { freopen("in.txt", "r", stdin); int t;原创 2020-09-15 17:05:24 · 148 阅读 · 0 评论 -
CodeForces A - Ahahahahahahahaha(构造)
题目 链接题目大意给一个只有0和1的具有偶数个元素的序列,从中删去最多 n2\frac{n}{2}2n 个元素,然后使得奇数位置上的元素总和和偶数位置上的元素总和相同。题目简析脑洞,只要最后序列只留下1或者0即可满足条件。为了简化过程我把1的个数记作aaa,把0的个数记作bbb。有以下几种情况。0的个数要大于1的个数那么说明1的个数就少于n2\frac{n}{2}2n个,删去全部的1,剩下的0满足条件。1的个数要大于0的个数因为序列是偶数的原因,所以当a>ba > ba原创 2020-09-09 09:35:07 · 213 阅读 · 0 评论 -
CodeForces A - Distance and Axis(数学)
题目 链接题目大意给定一个数字x然后要找到一个y满足:|y - |y - x|| = k,然后x每一次可以向左或者向右移动一步,问至少多少步可以找到满足要求的y,然后不存在负数(数轴是0-x)。简析分情况讨论即可。x <= k这种情况只能一直移动到k,即答案为k - xx > k这种情况有两种可能,一是当前状态就是合法的,只要满足x - k 是偶数,那么y就是(x - k) / 2,否则把x向右移动一格也能变成合法,所以答案就是0或者1,最开始合法就是0了;时间复杂度分析原创 2020-08-27 09:38:45 · 187 阅读 · 1 评论 -
CodeForces C - Boboniu and Bit Operations(思维)
题目 链接题意给出两个a,b序列,为每一个a[i]选一个b[j]得到他们的按位与(即a[i]&b[j]),把这些所有的结果按位或,求最小值。简析因为n,m都不大于200,可以先读入然后把每个组合的按位与求出来,就能够得到一个nm的矩阵,记录着每个按位与。然后问题就转化为,对于一个nm的矩阵,每行选一个数字出来,这n个数字的按位或最小。要从答案出发!因为每个数字都不大于29,所以直接遍历答案从0 ~ 29,然后找出第一个合法的就是最小的答案。判断合法的过程如下,对于一个想要判断状态的x原创 2020-08-26 13:35:25 · 169 阅读 · 0 评论 -
CodeForces B - Boboniu Plays Chess(构造)
题目 链接题意给定一个n*m 的棋盘,然后给定一个初始位置,棋子自动的方式跟象棋里的车一样,然后要求一种方案,使得每个点只落脚一次。简析简单构造,只要输出合法方案就行,那么我就让他先用最多两步移动到左上角,然后一格一格移动,如果是第二行那就从右向左,有可能会遇到之前走过的点,那么直接跳过。参考代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MOD = 1e9 + 7;con原创 2020-08-25 22:36:48 · 237 阅读 · 0 评论 -
CodeForces A - Boboniu Likes to Color Balls(思维)
题目 链接题意给定四个数字,然后可以让前三个数字同时减一并且让第四个数字+3,问有无可能四个数是回文串(相对于字符串个数而言)。简析如果有四个字母,判断回文串就是判断他们的奇偶性,4个数中要保证出现0个或1个奇数,都是能构造成成功的。0个奇数说明都是偶数,直接对半左边右边各一半,1个奇数把奇数放在中间,其他对半放。然后2 3 4都是不合法的(因为构造不出。。。)然后分前三个给第四个的过程就是奇偶互换的过程,如果开始有4个奇数,这是不合法的,当能过分过去的时候,就会变成0个奇数,然后如果还能分就是又原创 2020-08-25 21:52:33 · 141 阅读 · 0 评论 -
CodeForces C - Cyclic Permutations(组合数学)
题目 链接题目大意给定一个n,表示一个序列的长度,这个序列必须是1~n排列组合的某个序列。然后求对于一个n而言有几个序列是好的。分析题意可以发现,一个序列存在谷表示序列是好的。即序列存在X + a,X,X + b (a,b > 0),那么这本身就可以构成一个环,满足题意。由于答案可能很大要对1e9 + 7取模。简析首先打表 (手写 找规律,可以得到前几项。n = 1时,ans = 0n = 2时,ans = 0n = 3时,ans = 2n = 4时,ans = 16然后我们看看3的原创 2020-08-25 21:23:30 · 274 阅读 · 0 评论 -
Codeforces B - Fix You
题目 链接题目大意有一个传送带矩阵(n * m),每个格子有两个方向运输物品(向右或者向下),希望物品全部都到{n,m}的位置,就是说不要让东西掉下去。我们可以任意修改某个格子的运输方向,问最少需要修改几个。简析构造,只要最后一列没有向右的传送以及最后一行没有向下的传送即为合法状态。参考代码#include<bits/stdc++.h>using namespace std;const int N = 110;string a[N];int main() { // freo原创 2020-08-23 11:42:57 · 183 阅读 · 0 评论 -
Codeforces A - Suborrays
题目 链接题意构造一个1~n的某个排列,然后从ai到aj的按位或需要大于等于j - i + 1。简析思考一分钟发现构造不出不合法的序列,果断交一发任意构造,A过。原因就是在于每个数字是不重复的,因此只要高位存在,那么低位来任意多的都能够覆盖到。就算高位相同重复得再多,j - i + 1 也一定不会大于2 ^ n - 1,因此所有序列都是合法得。参考代码#include <bits/stdc++.h>using namespace std;typedef long long ll原创 2020-08-23 11:08:01 · 311 阅读 · 0 评论 -
LuoGu P1032 字串变换(BFS)
题目 链接题目大意给出一个原始串和一个终止串,求最少需要转移几步。实际上这就跟走迷宫差不多,而却权重是1的,暴力走就行,加上map优化会快很多,实际上不加的话有可能会T。参考代码#include <bits/stdc++.h>using namespace std;const int N = 2E2 + 10;int n;string a[N];int ans = 0;int main() { // freopen("in.txt", "r", stdin); st原创 2020-08-18 14:33:32 · 113 阅读 · 0 评论 -
通用的矩阵编码(LSB替换)
hhh如果你找到这篇文章,相信我也不用重新介绍这个东西了,那我就可以直接上代码了。int MatCodeEmbed(int n, vector<int> x, vector<int> a) { // @ n 需要嵌入的数据长度 // @ x 需要嵌入的数据,长度为n // @ a 原先的码元,长度为2^n - 1 vector<bitset<16>> b; for (int i = 0; i < (1 << n) - 1;原创 2020-08-18 11:05:13 · 1327 阅读 · 0 评论 -
Codeforces C - Good Subarrays(前缀和 + Map)
题目 链接题意简析题目给定了一个序列,然后需要求出一个子序列(连续),他们的和等于他们的长度。前缀和暴力枚举自然是T的,这里有一个思路,首先将所有的元素自减1,那么a[i] + a[i + 1] + a[i + 2] + … + a[i + n - 1] = n 就转化成 a[i] - 1 + a[i + 1] - 1 + a[i + 2] - 1 + … + a[i + n - 1] - 1 = 0。这就意味着我们只需要统计字串和为0的方案数即可。我们计算1…n的前缀和,如果当前的sum为零,那原创 2020-08-16 13:53:02 · 213 阅读 · 0 评论 -
G723音频格式读入内存
音频是用ffmpeg转的,然后用c++把文件从磁盘读到内存按帧存储,每一帧有24字节(192比特)文件头和码流部分是分开的我并不确定每个文件头都一样文件头和帧定义struct WaveFileHead{ char riff_id[4]; //"RIFF" int size0; //波形块的大小 char wave_fmt[8]; //"wave" and "fmt " // 二合一 int size1; //格式块的原创 2020-08-16 12:21:29 · 337 阅读 · 1 评论 -
Codeforces C - Pinkie Pie Eats Patty-cakes(二分答案)
题目 链接题目大意给定一个离散序列,包含n个数字,重排这个序列,使得两个相同数字最小距离最大。题目简析关键词触发,最小的xx最大,我们尝试用二分去求解。首先应当注意到的一个点在于,每个数字之间的性质是相同的,这就意味着“1 1 1 3 3”序列和“2 2 2 3 3”序列答案应当是一样的,所以我们首先读入的时候要统计数字的个数,而不用关心具体的数字是什么,上面的例子就会被简化成“3 2”,也就是说有两个数字,一个数字有3个,一个数字有2个,求答案。二分思路,设置左端点0,右端点n,找到最后一个符原创 2020-08-13 19:51:13 · 522 阅读 · 0 评论 -
Codeforces D - Binary String To Subsequences(思维 + 数据结构)
题目 链接题目大意给定一个字符串,然后找到最少的字串构造方案,满足所有字串都是“0101…”或者“1010…”,如果有多个答案输出其中一个序列即可。数据给了1e5,意味着要在Onlogn或者On的时间完成。每个数字都能够匹配与自己不同的最近的一个数字,但是只能用一次,例如“10011”中,显然s[2] = ‘0’ 不能跟s[0] 去匹配,因为已经被s[1]匹配过了,这就意味着,我们只要保存两个序列,用队列去模拟这个过程。还是用“10011” 举例子,初始化t = 1第一回合x = 1(s[0原创 2020-08-07 19:50:24 · 226 阅读 · 0 评论 -
P3743 kotori的设备(实数二分答案)
题目 链接题目描述第 i 个设备每秒消耗ai个单位能量。能量的使用是连续的,也就是说能量不是某时刻突然消耗的,而是匀速消耗。也就是说,对于任意实数 ,在 k 秒内消耗的能量均为k*ai 单位。在开始的时候第 i 个设备里存储着bi个单位能量。同时 kotori 又有一个可以给任意一个设备充电的充电宝,每秒可以给接通的设备充能p 个单位,充能也是连续的,不再赘述。你可以在任意时间给任意一个设备充能,从一个设备切换到另一个设备的时间忽略不计。kotori 想把这些设备一起使用,直到其中有设备能量降为 0原创 2020-08-07 01:11:30 · 500 阅读 · 0 评论 -
P3853 [TJOI2007]路标设置(二分答案)
题目 链接题目描述现在政府决定在公路上增设一些路标,使得公路的“空旷指数”最小。他们请求你设计一个程序计算能达到的最小值是多少。请注意,公路的起点和终点保证已设有路标,公路的长度为整数,并且原有路标和新设路标都必须距起点整数个单位距离。输入格式第1行包括三个数L、N、K,分别表示公路的长度,原有路标的数量,以及最多可增设的路标数量。第2行包括递增排列的N个整数,分别表示原有的N个路标的位置。路标的位置用距起点的距离表示,且一定位于区间[0,L]内。输出格式输出1行,包含一个整数,表示增设路标后原创 2020-08-07 01:02:19 · 1798 阅读 · 2 评论 -
P1182 数列分段 Section II(二分答案)
题目 链接思路简析尽可能地把数字分在一组里,但是不能超过check的值,二分的特征之一是 == 最大的值最小 == ,其次发现x,x+1,x+2,...,x+n都是有效的,找到最左边的有效值。参考代码#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 100010;ll a[N];ll n, m;ll check(ll x) { ll cnt = 0; ll su原创 2020-08-07 00:55:36 · 419 阅读 · 0 评论 -
P2678 跳石头(思维 + 二分答案)
题目 链接题目描述这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 N 块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走 M 块岩石(不能移走起点和终点的岩石)。输入格式第一行包含三个整数 L,N,M,分别表示起点到终点的距离,起点和终点原创 2020-07-27 02:02:01 · 320 阅读 · 2 评论 -
P2440 木材加工(二分答案)
题目 链接题目描述木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定的。当然,我们希望得到的小段木头越长越好,你的任务是计算能够得到的小段木头的最大长度。木头长度的单位是cm。原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。例如有两根原木长度分别为11和21,要求切割成到等长的6段,很明显能切割出来的小段木头长度最长为5.输入格式第一行是两个正整数N和K(1 ≤ N ≤ 100000,1 ≤ K ≤ 100000000)原创 2020-07-27 01:07:32 · 2719 阅读 · 0 评论 -
P1873 砍树(二分答案)
题目 链接题目描述伐木工人米尔科需要砍倒M米长的木材。这是一个对米尔科来说很容易的工作,因为他有一个漂亮的新伐木机,可以像野火一样砍倒森林。不过,米尔科只被允许砍倒单行树木。米尔科的伐木机工作过程如下:米尔科设置一个高度参数H(米),伐木机升起一个巨大的锯片到高度H,并锯掉所有的树比H高的部分(当然,树木不高于H米的部分保持不变)。米尔科就行到树木被锯下的部分。例如,如果一行树的高度分别为20,15,10和17,米尔科把锯片升到15米的高度,切割后树木剩下的高度将是15,15,10和15,而米尔科将原创 2020-07-22 20:29:28 · 2826 阅读 · 1 评论 -
P1163 银行贷款(二分)
题目 链接题目描述当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。输入格式三个用空格隔开的正整数。第一个整数表示贷款的原值,第二个整数表示每月支付的分期付款金额,第三个整数表示分期付款还清贷款所需的总月数。输出格式一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到0.1%。输入输出样例输入 #11000 100 12输出 #12.9题意分析首先需要知道公式。。。。给出n,m,k,求贷原创 2020-07-22 20:17:16 · 496 阅读 · 0 评论 -
P1678 烦恼的高考志愿(数学 + 二分)
题目 链接题目背景计算机竞赛小组的神牛V神终于结束了万恶的高考,然而作为班长的他还不能闲下来,班主任老t给了他一个艰巨的任务:帮同学找出最合理的大学填报方案。可是v神太忙了,身后还有一群小姑娘等着和他约会,于是他想到了同为计算机竞赛小组的你,请你帮他完成这个艰巨的任务。题目描述现有 (m≤100000) 所学校,每所学校预计分数线是(ai ≤10 )。有 (n≤100000) 位学生,估分分别为 (bi ≤106)。根据n位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的原创 2020-07-21 19:14:02 · 655 阅读 · 0 评论 -
P1102 A - B 数对(二分)
题目 链接P1102 A - B 数对题目描述出题是一件痛苦的事情!相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!好吧,题目是这样的:给出一串数以及一个数字 C,要求计算出所有 A - B = C 的数对的个数(不同位置的数字一样的数对算不同的数对)。输入格式输入共两行。第一行,两个整数 N, C。第二行,N 个整数,作为要求处理的那串数。输出格式一行,表示该串数中包含的满足 A - B = C 的数对的个数。输入输出样例输原创 2020-07-21 18:56:43 · 528 阅读 · 0 评论 -
P2249 查找(二分)——用二分的角度看世界
P2249 【深基13.例1】查找 模板题目大意给定n个数字然后给m个查找,每次查找给定数字x的位置。思路二分板子,找出最左边的那个数字就行。参考代码#include <bits/stdc++.h>using namespace std;const int N = 1000010;int a[N];int n;int find(int x) { int l = 0, r = n; while (l < r) { int mid = l + r >&原创 2020-07-19 15:53:09 · 185 阅读 · 0 评论 -
P1024 一元三次方程求解(暴力 + 二分)
P1024 一元三次方程求解题目描述有形如:ax3+bx2+cx1+dx0= 0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值 ≥ 1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。提示记方程f(x)=0,若存在2个数x1和x2,x1 < x2,x1 * x2 < 0,则在(x1,x2)且之间一定有一个根。输入格式一行,4个实数A,B原创 2020-07-19 15:48:15 · 930 阅读 · 0 评论 -
基础模板LV3_康托展开(LuoGu P5367)
康托展开 模板题目描述求 1∼N 的一个给定全排列在所有 1∼N 全排列中的排名。结果对 998244353 取模。输入格式第一行一个正整数 N。第二行 N 个正整数,表示 1∼N 的一种全排列。输出格式一行一个非负整数,表示答案对 998244353998244353 取模的值。输入输出样例输入 #132 1 3输出 #13输入 #241 2 4 3输出 #22说明/提示对于10%数据,1≤N≤10。对于50%数据,1≤N≤5000。对于100%数据,1≤N≤1原创 2020-07-17 19:53:19 · 697 阅读 · 0 评论 -
基础模板LV3_拓扑排序(AcWing 848)
拓扑排序灵魂画图文字类似于宽度优先搜索的思想,区别在于,当从u找到v时,并不马上把v放入队列,而是找到v的时候就需要把v的“入度” 减去一个1,当入度为零时则入队并输出。例如②中我们从2开始搜索(从任意一个入度为0的节点开始即可),找到了4,但是此时4应该还需要3完成之后才能点亮4,所以4不入队,但他的入度会减一,从原本的2变成了1,然后再从1开始搜索,搜索到3,点亮,搜索到4,点亮(因为此时的入度已经为零了),最后搜索到5。对于一个有向无环图(DAG)而言,一定存在至少一个拓扑序,并且入度为零原创 2020-07-17 17:42:20 · 200 阅读 · 0 评论 -
动态维护集合第k小数字(树状数组 + 二分)
树状数组 + 二分求第k小数字大致题意设计一种数据结构能够实现以下几个操作在结构中插入一个数字x在结构中删除一个数字x(如果没有该数字,应当不操作)查找结构中的第k小数字(相同数字应当累计,如 1 5 3 3 1,第 3 大的数字是 3, 第 5 大的数字是 5.其中 1 <= x <= 100000一秒需要执行100000次随机操作,所以三项操作时间复杂度应当不超过log级。简单分析首先要支持插入和删除查找三项并且还要是log级的一般就是树结构,这里采用了树状数组来维护结果,原创 2020-07-17 13:41:01 · 594 阅读 · 0 评论 -
HDU 2899 Strange fuction(数学 + 三分 或 二分)
HDU 2899Problem DescriptionNow, here is a fuction:F(x) = 6 * x7+8 * x6+7 * x3+5 * x2-y * x (0 <= x <=100)Can you find the minimum value when x is between 0 and 100.InputThe first line of the input contains an integer T(1<=T<=100) which me原创 2020-07-09 20:23:36 · 151 阅读 · 0 评论