算法入门
jiangkun0331
Bugs总是让我们无法心安
展开
-
数论 开灯关灯问题
题目描述现在有 n 盏灯,每盏灯有一个开关,编号从 1~n。如果灯是关着的,摁一次开关就会打开。如果灯是开着的,摁一次开关就会关闭。目前所有灯都是关闭的。现在有 n 个人,每个人都有一个编号,分别为 1 ~ n。n 个人轮流摁下自己编号的倍数号码的开关。问最后还有多少盏灯是亮着的。输入第一行输入 一个 T。接下来 T 行,每行一个数字 n,表示有 n 盏灯。(0 < T...原创 2020-04-14 14:14:19 · 1633 阅读 · 0 评论 -
二分图匹配 + 最小点覆盖 + 最小支配集 + 最大独立集(模板)
选课(二分匹配)Poj1649 COURSES一共有N个学生跟P门课程一个学生可以任意选一 门或多门课,你需写一个程序,判断给定的输入是否可以满足以下条件。1.每个学生选的都是不同的课(即不能有两个学生选同一门课)2.即P门课都被成功选过注意:是课程匹配的学生,学生没课上没事。输入第一行一个T代表T(T ≤ 10)组数据对于每组测试样例,先输入两个整数P, N(P课程数 N学生数)...原创 2019-08-19 21:31:33 · 489 阅读 · 0 评论 -
国内外常用主流OJ介绍
1.Virtual Judge:https://vjudge.net/ 一个爬虫网站,可以做各大OJ的题,也可以自己组成套题做比赛2.POJ:http://poj.org/ 北大的老牌OJ,不过题目比较老,且不支持新的编译器如C++113.HDU:http://acm.hdu.edu.cn/ 杭电的OJ,基本取代了POJ成长为国内最成熟、最主流的OJ4.UVA:https://uva.onl...原创 2019-08-24 20:57:40 · 2210 阅读 · 0 评论 -
Tarjan入门
Tarjan算法求强连通分量样例输入:6 81 21 33 43 54 12 45 64 6样例输出:652 4 3 1#include <bits/stdc++.h>using namespace std;#define maxn 100010struct node{ int u,v; int next;}edge[maxn];int df...原创 2019-08-15 20:26:28 · 89 阅读 · 0 评论 -
链式前向星
链式前向星是ssfz神牛Malash创造的(至少Baidu上没有搜到)名词,或许这种数据结构有其他更加正规易懂的名字,但我还是没有搜到。(有一个资料称之为加上next数组前向星,但这个名字实在不好) 该数据结构可能是Jason911神牛或其他神牛发明的。如果说邻接表是不好写但效率好,邻接矩阵是好写但效率低的话,前向星就是一个相对中庸的数据结构。前向星固然好些,但效率并不高。而在优化为链式前向星后...原创 2019-08-15 20:31:14 · 139 阅读 · 0 评论 -
LCA+RMQ
最近公共祖先区间最值查询暴力求解LCA/*DFS建树 + 普通搜索思路:建树:找到根节点,然后记录每个节点的父亲节点和该节点的的深度,搜索:从两个节点开始向上找,一直找的两个节点重合为止*/#include <bits/stdc++.h>using namespace std;#define maxn 10010vector<int> tree...原创 2019-08-15 20:35:35 · 174 阅读 · 0 评论 -
计算几何——立体几何模板
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const double eps = 1e-8;int sgn(double x){ if(fabs(x)&...原创 2019-08-15 20:37:00 · 160 阅读 · 0 评论 -
计算几何——平面几何模板
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const double eps=1e-8;const double inf=1e20;const double ...原创 2019-08-15 20:38:09 · 110 阅读 · 0 评论 -
AC自动机
AC自动机的构造:1.构造一棵Trie,作为AC自动机的搜索数据结构。2.构造fail指针,使当前字符失配时跳转到具有最长公共前后缀的字符继续匹配。如同 KMP算法一样, AC自动机在匹配时如果当前字符匹配失败,那么利用fail指针进行跳转。由此可知如果跳转,跳转后的串的前缀,必为跳转前的模式串的后缀并且跳转的新位置的深度(匹配字符个数)一定小于跳之前的节点。所以我们可以利用 bfs在 Tri...原创 2019-08-22 19:13:29 · 157 阅读 · 0 评论 -
组合数学(费马小定理+卢卡斯定理)模板
组合数取模(费马小定理)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int G = 1000000;#define mod 1000000007ll pri[G];ll ni[G];ll pow(ll a,ll b,ll m){ ll ans = 1; a %...原创 2019-08-18 21:16:32 · 205 阅读 · 0 评论 -
数论基础 (gcd+lcm+分解质因数+欧拉函数+欧拉定理+费马小定理+扩展欧几里得)模板
gcd+lcm#include<bits/stdc++.h>using namespace std;typedef long long LL;LL gcd(LL a,LL b){ return b==0?a:gcd(b,a%b);}LL lcm(LL a,LL b){ return a*b/gcd(a,b);}int main(){ int n; L...原创 2019-08-18 21:13:06 · 213 阅读 · 0 评论 -
线性dp+区间dp
线性dp导弹袭击某国为了防御敌国的导弹袭击发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度但是以后每一发炮弹都不能超过前一发的高度.某天雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段所以只有一套系统因此有可能不能拦截所有的导弹.怎么办呢?多搞几套系统呗!你说说倒蛮容易成本呢?成本是个大问题啊.所以俺就到这里来求救了请帮助计算一下最少需要多少套拦截...原创 2019-07-27 21:42:39 · 159 阅读 · 0 评论 -
线段树+字典树
线段树线段树,是一种二叉搜索树。它将一段区间划分为若干单位区间,每一个节点都储存着一个区间。它功能强大,支持区间求和,区间最大值,区间修改,单点修改等操作。线段树的思想和分治思想很相像。线段树的每一个节点都储存着一段区间[L…R]的信息,其中叶子节点L=R。它的大致思想是:将一段大区间平均地划分成2个小区间,每一个小区间都再平均分成2个更小区间……以此类推,直到每一个区间的L等于R(这样这个...原创 2019-07-23 23:40:19 · 425 阅读 · 0 评论 -
O(nlogn)排序 + 贪心 + 二分 经典例题
1.快速排序找第K个大的给出n个无序的整数,请输出其中按升序排列后的第k个数。(请应用分治(快排)思想)#include<bits/stdc++.h>using namespace std;const int maxn=10000000;int s[maxn];int n,k;int partition(int low, int high) { int pivotke...原创 2019-07-20 00:22:18 · 249 阅读 · 0 评论 -
树状数组
lowbit操作:int lowbit(int x){ return x & (-x);}更新操作:void update(int x, int num){ for(int i = x; i <= N; i += lowbit(i)){ tree[i] += num; }}求和操作:int getSum(int x){ ...原创 2019-07-24 21:21:16 · 113 阅读 · 1 评论 -
差分约束+生成树+传递闭包
A.解不等式题目描述给定n个变量和m个不等式,每个不等式形如 x[i] - x[j] <= a[k] (0 <= i j < n 0 <= k < m, a[k]已知),求 x[n-1] - x[0] 的最大值。输入第一行 nm 表示的是n个变量和 m个不等式接下来的 m行 会输入三个数abc 表示Xa-Xb<=c;输出输出一行结果 表示 Xn-1...原创 2019-07-29 23:35:14 · 146 阅读 · 0 评论 -
SUST-ACM-2019届暑期ACM集训热身赛2题解
题目链接:http://sustoj.com/JudgeOnline/contest.php?cid=1035问题 A: 三角形的面积三角形成立的条件是:任意两边大于第三边已知三边求面积:#include <stdio.h>#include <math.h>double a,b,c;double A;double ans;int main(){ in...原创 2019-07-21 23:03:55 · 344 阅读 · 0 评论 -
快速乘+快速幂+矩阵快速幂+欧拉筛
O(1) 快速乘#include <iostream>using namespace std;int main(){ int a, b; cin >> a >> b; cout << a * b << endl; return 0;}防止溢出时间复杂度为 O(logn)typedef lo...原创 2019-07-30 21:42:13 · 88 阅读 · 0 评论 -
博弈论
巴什博弈十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫《勇敢者的游戏》(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻。今天,大家选择上机考试,就是一种勇敢(brave)的选择;这个短学期,我们讲的是博弈(game)专题;所以,大家现在玩的也是“勇敢者的游戏”,这也是我命名这个题目的原因。当然,除了“勇敢”,我还希望看到“诚信”,无...原创 2019-07-26 22:06:22 · 274 阅读 · 0 评论 -
记忆化搜索+背包问题
入侵和反击A国部署的反导系统遇到了一个致命BUG,那就是每一次发射的拦截导弹的飞行高度都将只能小于等于上一枚导弹的飞行高度,第一次发射的拦截导弹的飞行高度可以看作是足够大。对于A国,这是一件很严重的问题,这意味着A国的防空系统面临空前危机。通过对A国的军事部门计算机的入侵,A国还不知道敌对国B国刚才已经发现了这项BUG。更不知道,在这项BUG的报告书上交到B国空军司令部那一刻,三分钟后B国的全...原创 2019-07-26 22:11:54 · 276 阅读 · 0 评论 -
最短路
问题 A: 简单最短路题目描述老左今天打算去小寨逛街,但是呢作为一个新时代的年轻人他决定一定要找到最短的一条路,作为一个有钱的大佬,他认为公交车转车都是小钱,时间才是最重要的,于是他想知道最少要多少时间才能到小寨假设一共有n 个车站,我们学校门口的车站编号为1, 小寨站编号为n,之后会给出一个m,随后会给出m条双向通道以及通过所需要的时间。输入第一行N , M ( 2 <= N &...原创 2019-07-28 22:50:20 · 172 阅读 · 0 评论