
算法
文章平均质量分 53
Re:fused
stay hungry stay foolish
展开
-
Leetcode 刷题总结
最近正在刷题,时间久了一些想法可能就忘记了,特此写此片论文,记录一下一些题目的解体思路,供以后参看。原创 2023-03-01 14:46:38 · 407 阅读 · 1 评论 -
位运算练习
位运算练习原创 2022-08-17 15:42:57 · 215 阅读 · 0 评论 -
Leetcode:剑指 Offer 59 - I. 滑动窗口的最大值
给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。采取优先队列,队首为大的元素,有限队列中存入两个数据,数值和位置,首先把前k个数据放入,在窗口进行滑动时,加入新的元素,查看队首最大的元素是不是当前窗口,不是则弹出,知道是当前窗口为止。...原创 2022-06-03 14:55:14 · 1347 阅读 · 0 评论 -
Leetcode:829. 连续整数求和
给定一个正整数 n,返回 连续正整数满足所有数字之和为 n 的组数 。连续就想到了等差为1的等差数列,所以有公式ma1+(m−1)m/2=m(ma1+(m−1)/2)=nma_1+(m-1)m/2=m(ma_1+(m-1)/2) = nma1+(m−1)m/2=m(ma1+(m−1)/2)=n,可以看出m必须是n的银子,并且m-1为偶数才可以,才能确保a1a_1a1为整数。...原创 2022-06-03 13:24:19 · 335 阅读 · 0 评论 -
Leetcode:442. 数组中重复的数据
题目:442. 数组中重复的数据题意:给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。代码:因为数据范围在[1-n],所以通过对数据进行取相反数进行标记class Solution {public: vector<int> findDuplicates(vect原创 2022-05-08 16:13:06 · 413 阅读 · 0 评论 -
leetcode:单词长度的最大乘积
题目:单词长度的最大乘积来源:力扣(LeetCode)题意: 给定一个字符串数组 words,请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时,它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串,返回 0。分析: 因为需要挨个单词比较,所以很容易想到O(n2)O(n^2)O(n2)的算法,采用层for循环,但是存在一个问题,如何高效的判断两个单词是否有重复的字母,最容易想到就是开vis[单词数量][26]的数组,时间复杂原创 2022-04-30 11:22:48 · 170 阅读 · 0 评论 -
codeforces div2 Row GCD
题目:Row GCD题意:给定一个数组a1…an,在给定一个数组b1…bm,求出所有GCD(a1+bj,…, an+bj)思路:参考博客点击辗转相除不仅适用于两个数 gcd(x, y) = gcd(x, y - x),它适用于多个数 gcd(a1+bj,a2+bj,…,an+bj)=gcd(a1+bj,a2+bj,…,an+bj−an−1−bj)最后 gcd(a1+bj,a2+bj,…,an+bj)=gcd(a1+bj,a2−a1,…,an−an−1)先预处理 gcd(a2−a1,…,an−a原创 2021-02-23 11:35:59 · 183 阅读 · 0 评论 -
寻找[0, n] 消失的一个元素
本篇博客的知识体系来自labuladong的汇总,对其精妙的方法极为原创 2021-02-21 16:22:17 · 303 阅读 · 0 评论 -
可达性统计(拓扑排序)
题目:可达性统计题意:给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量。思路:建图之后采用拓扑排序,然后反向遍历,使用bitset去标记所有可以走的点代码:#include<iostream>#include<bitset>#include<queue>#include<string.h>using names...原创 2019-05-28 19:29:24 · 493 阅读 · 0 评论 -
数独(dfs+剪枝)
题目:数独参考:yxc题意:就是给你一个九宫格,让你填数,使横行包含1 ~ 9,纵行包含1 ~ 9,每一块包含1 ~ 9 。思路:本题采用深搜,然后通过用col和row分别记录横行和纵行没有被用过的数,cell来标记没有被用过的数,通过0代表这个数已经被用过了,1代表这个数没有被用过,然后通过剪枝找到某个数可以填数的最小可能,这个最小可能通过row[x] & cell[x/3][y/...原创 2019-05-31 11:23:38 · 770 阅读 · 1 评论 -
小猫爬山(简单的dfs)
题目:小猫爬山思路:本题从题意中,很容易但出来是DP但是数据范围很大,所以就把DP排除了,所以我们就想到用dfs,把猫的重量按照从大到小的顺序,先把的先放一个车子里,然后把不断的去把小的是否能和大的放在一个车子里,我门有两种方案,一种是放在已有的车子里,如果放不下,那么我门就重新申请一辆车子。代码:#include<bits/stdc++.h>using namespace s...原创 2019-05-28 19:56:30 · 1668 阅读 · 2 评论 -
Minimal string(贪心)
题目:Minimal string题目:就是先给你一个串S,然后在给你两个串T, U,你有两个操作,把T的第一字符加入到T的后面,把T的最后一个字符加到U的后面,最后T和S中都为空,U中按照最大的字典序输出。思路:我们通过从后往前更新,更新最小的,然后通过栈来维护代码:#include<bits/stdc++.h>using namespace std;const int ...原创 2019-05-30 23:25:18 · 271 阅读 · 0 评论 -
Codeforce Cthulhu
题目:Cthulhu题意:就是让你找一个简单的环,而且这个环不需要经过所有的点,只需要经过某些点就可以了,如果存在输出 FHTAGN! ,否则输出NO。思路:简单的环就是只存在一个环,不存在多种环的情况,所以这种情况下我们我可以判断n个点是否连通,然后在判断边数是否为n,为什么?假设只经过6个点5条边已经连通了这种情况就是一条相连的直线的那种情况,那么再多一个点,那么这个图就存在环,不要想的太...原创 2019-05-30 23:17:13 · 251 阅读 · 0 评论 -
Trie算法
题目:最大异或对题意:给你n个数,让你求出任意两个数的异或值的最大值。思路:本题如果采用异或操作时间指定会超时,所以就需要优化,我们可以换一种方法去思考这个问题,可以把所有的A[i]的写成二进制,把这些二进制用Trie来存储,在查找第A[i]的异或的最大值的时候,我们可以从头开始找的时候如果有跟A[i]的二进制相反的那么就找相反的,如果没有相反的就找相同的。代码:#include<b...原创 2019-05-06 22:50:24 · 277 阅读 · 0 评论 -
资料整理
文章目录1.区间最大值2.N!问题2.1N!是质因数分解:2.2求出N,把他转化为base禁制, N!是几位的。3. 1~N的约数问题3.1 1~n所有数的约数之和:3.2 1~n所有数的约束的个数4. 大数取模(同余模定理)5.求Hn6.求n^k的前三位数字与后三位数字7.莫队算法8.AC自动机8.1给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过。8.2有N个由小写字母组成的模式串...原创 2019-05-13 19:44:27 · 340 阅读 · 0 评论 -
回文子串的最大长度
题目:回文子串的最大长度思想:字符串哈希+二分 OR Manacher代码1:#include<bits/stdc++.h>using namespace std;const int maxn = 2001000;//注意数组开的范围typedef unsigned long long ULL;char s[maxn];ULL hr[maxn], hl[maxn], p...原创 2019-05-08 21:16:13 · 346 阅读 · 0 评论 -
余数之和(除法分块)
题目:余数之和思路:就是除法分块代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;LL n, k, ans, tot;int main(){ scanf("%lld %lld", &n, &k); tot = n*k; LL l = 1, r; ...原创 2019-05-05 20:48:53 · 326 阅读 · 0 评论 -
字符串哈希
字符串哈希如果不懂什么是字符串哈希,那么你可以看yxc大佬的视频算法竞赛进阶指南1.4-1.5哈希与字符串题目:回文子串的最大长度题意:给你一个字符串,问你这个字符串最大的回文串是多长?题解:字符串哈希+二分查找代码:#include<bits/stdc++.h>using namespace std;const int maxn = 2001000;//注意数组开的...原创 2019-05-05 18:55:45 · 570 阅读 · 0 评论 -
强连通分量Tarjan
参考博客:浅析强连通分量(Tarjan和kosaraju) Tarjan·关于图的连通性 & 连通分量题目:1332 上白泽慧音代码:#include<bits/stdc++.h>using namespace std;const int maxn = 5010;const int N = 50010;stack<...原创 2019-04-29 22:34:38 · 183 阅读 · 0 评论 -
LCM from 1 to n LightOJ - 1289
题目:LCM from 1 to nLightOJ - 1289题意:给你一个数n求LCM(1, 2,........,n ),LCM 为最大公约数。思路:该题可以根据n = 10找一下规律。1 2 3 4 5 6 7 8 9 10最大公约数为5 * 7 * 8* 9 = 2520,可以看出规律LCM等于p1^x1*p2...原创 2019-04-24 23:11:52 · 344 阅读 · 0 评论 -
数论知识点整理
数论Java中BigInteger类的用法1.add(); //大整数相加BigInteger a=new BigInteger(“23”);BigInteger b=new BigInteger(“34”);a.add(b);2.subtract(); //相...原创 2019-05-04 20:43:02 · 625 阅读 · 0 评论 -
Little Sub and Triangles(叉积+二分查找)
题目: Little Sub and Triangles题意:数据:4 20 1100 1000 01 00 500 2思想:因为最多只用250个点,通过O(N^3)把所有的三角形面积求出来,通过二分查找,找到答案。叉积公式:S=abs(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2) /2;代码:#include<bits/stdc++.h>...原创 2019-05-04 20:35:44 · 248 阅读 · 0 评论 -
As rich as Crassus(扩展中国剩余定理)
题目:As rich as Crassus思路:本题的思路就是扩张中国剩余定理。代码:#include<bits/stdc++.h>using namespace std;#define LL long longLL n, m[105], a[105], flag = 0, A;LL exgcd(LL a, LL b, LL &x, LL &...原创 2019-04-28 22:53:09 · 872 阅读 · 2 评论 -
Communication(Floyed+并查集 || Trajan)
题目:Communication数据:362 0 5 5 057 0 1 0 2 1 0 1 3 2 4 3 1 4 234 0 1 0 2 1 0 1 2题意:就是告诉你如果A --> B表示A可以向B传送消息,如果A可以向B传送消息,B也可以向A传送消息,那么A和B就在一组,问你一共有几组。思路:一开始很容易想到,用一个数组vis[a][...原创 2019-04-28 20:23:49 · 374 阅读 · 0 评论 -
DFS深度优先搜索练习
题目:Oil Deposits题意:用@代表油田,八个方向互相连接,把相连的油田看作一块油田,问你最多有多少块油田。思路:本题其实本质就是一个迷宫问题,所以我们就可以用dfs或者bfs,本题我们当然采用dfs,用一个vis标记一下,然后从头开始遍历,如果这个点等于‘@’并且vis为0时,开始bfs一次,记录bfs的次数,bfs的次数就是结果。#include<bits/stdc++.h...原创 2019-05-28 21:54:59 · 244 阅读 · 0 评论 -
dfs练习(一)
题目:Badge思路:简单的dfs,因为只用一个分支,当再次回来的时候就是结果。代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1005;int a[maxn], tot = 0;int n, vis[maxn], ans = 0;int dfs(int u){ vis[u] = ...原创 2019-06-05 23:13:35 · 446 阅读 · 0 评论 -
二分图
二分图的定义和判定方法:参考博客:二分图的定义和判定染色法判定二分图代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+10;int h[maxn*2], to[maxn*2], nex[maxn*2], vis[maxn], tot = 0;void add(int u, int v)...原创 2019-09-28 16:30:51 · 169 阅读 · 0 评论 -
最短路
注:本篇博客的思想来自于yxc大佬的视频讲解,按照大佬的思想自己敲了一下。朴素Dijkstra算法题目:Dijkstra求最短路 I题意:该题题意就是,给你一个图,让你求出点1到n的最短路。思路:由于该题所有边的权值都是正数,而且是一个稠密图,便比较多而且,点比较少,所以比较适合朴素的Dijstra算法。时间复杂度O(n^2)。别的算法也可以,该题没有卡spfa算法,就是哪一个稍微比较好的...原创 2019-09-22 15:03:37 · 195 阅读 · 0 评论 -
搜索学习
题目: 排列数字题意:就是让你输出全排列。思路:可以用dfs去搜索。代码:数组标记#include<bits/stdc++.h>using namespace std;const int maxn = 10;int pri[maxn], n, vis[maxn];void dfs(int step){ if(step == n){ for(in...原创 2019-09-21 19:55:12 · 2292 阅读 · 0 评论 -
次最短路
次最短路的思想:起点s, 终点t,中间点u,次最短路可以通过到u的最短路+u到t的次短路,或者t到u 的最短路+u到t的最短路。例题:Roadblocks代码:#include<iostream>#include<stdio.h>#include<queue>#include<string.h>using namespace std;...原创 2019-09-19 21:33:08 · 266 阅读 · 0 评论 -
dfs练习(二)
文章目录题目:[Soldier and Cards](http://codeforces.com/problemset/problem/546/C)题目:Soldier and Cards代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+10;queue<int>s, t;m...原创 2019-09-03 21:25:03 · 253 阅读 · 0 评论 -
Nothing for Nothing(二十一)
题目:Knapsack Cryptosystem题意:给你n个数,和一个数m问你这个数m由哪些个数相加构成的。思路:看到这道题的时候首先就想到了搜索,但是由于n是36暴力搜索一定会超时,所以我们就有折半搜索。把n个数一分为2,分别暴力。代码:#include<bits/stdc++.h>using namespace std;#define LL long longcon...原创 2019-08-16 15:18:15 · 216 阅读 · 0 评论 -
Nothing for Nothing( 十八 )
题目:Nested Segments思路:把横坐标从小到大排序,纵坐标进行离散化,然后从右往左遍历,用树状数组去维护。代码:#include<bits/stdc++.h>using namespace std;const int maxn = 2e5+10;struct Node{ int x,y, id;}seg[maxn];int ans[maxn],...原创 2019-08-06 19:00:50 · 174 阅读 · 0 评论 -
Nothing for Nothing( 十六)
题目:AND Minimum Spanning Tree代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1e6+10;int p[maxn];int lowbit(int x){ return x & (-x);}queue<int>q;int main(){ ...原创 2019-08-01 19:51:29 · 236 阅读 · 0 评论 -
网络流
参考博客:网络流–最大流(ek算法详解)探网络流:dinic/EK算法学习笔记题目:Drainage Ditches纯模板题代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+10;const int INF = 1e7;int cnt = 0, cost[maxn<<1]...原创 2019-08-04 14:44:23 · 277 阅读 · 0 评论 -
Nothing for Nothing( 十二 )
题目1:Mahmoud and a Dictionary代码:#include<bits/stdc++.h>using namespace std;const int maxn = 2e5+10;int f[maxn];int Find(int x){ if(f[x]==x) return x; else return f[x]=Find...原创 2019-07-26 14:17:59 · 197 阅读 · 0 评论 -
线性基
线性基参考博客:关于线性基的学习与理解线性基详解题目:P3812 【模板】线性基题意:给你一个数组,让你任意选数,使异或和最大。#include<bits/stdc++.h>using namespace std;#define LL long longconst int maxn = 100;LL p[maxn];void Insert(LL val){ ...原创 2019-07-31 10:18:59 · 176 阅读 · 0 评论 -
Nothing for Nothing(十七)
题目:Subsegments代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1e5;int a[maxn];set<int>S;multiset<int>M;int main(){ int n, k; scanf("%d %d", &n, &...原创 2019-08-02 17:14:26 · 282 阅读 · 0 评论 -
线段树
参考博客:基本线段树模板(建树、点/区间修改、查询)题目:P3372 【模板】线段树 1代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+10;#define LL long longLL a[maxn<<2], st[maxn<<2], add[maxn<...原创 2019-07-20 16:34:25 · 273 阅读 · 0 评论 -
Nothing for Nothing(十四)
题目:Fansblog题意:给你一个素数n,然后让你找到小于n的最大素数Q,问Q!mod p == ?.思路:(p−2)! mod p≡P( mod p)(p-2)! \bmod p \equiv P(\bmod p)(p−2)!modp≡P(mod...原创 2019-07-29 19:52:25 · 187 阅读 · 0 评论