算法二
一扁舟
这个作者很懒,什么都没留下…
展开
-
2019-2020 ICPC Asia Yinchuan Regional Contest【银川现场赛】
A. Girls Band Party题目链接DescriptionYou are currently playing a game called “Garupa”. In an event of the game, you are trying to get more event points. You have nn cards, each with its own name, colo...原创 2020-03-17 21:39:21 · 1303 阅读 · 0 评论 -
数码
题目给定两个整数l和r,对于任意x,满足l≤x≤r,把x所有约数写下来。对于每个写下来的数,只保留最高位的那个数码。求[1,9]中每个数码出现的次数.1≤l≤r≤10^9解析:如果正面去想每个数的约数,绝对超时,反过来如果a*b属于[l,r],那么a,b是符合条件的约数,首先考虑约数i会被统计r/i-(l-1)/i次,鉴于其形式相同,考虑怎么统计r/i分块1、当约数i<sq...原创 2020-02-11 18:03:15 · 201 阅读 · 0 评论 -
差分约束
概念如果一个系统由n个变量和m个约束条件组成,形成m个形如ai-aj≤k的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统。求a[i]-a[j] 最小值。与最短路的联系先给出结论:求解差分约束系统,都可以转化成图论的单源最短路径(或最长路径)问题。我们观察上面例子中的不等式,都是x[i] - x[j] <= a[k],可以进行移项,成为x[i] <= x[j] ...原创 2019-11-26 15:12:53 · 177 阅读 · 0 评论 -
第k短路
A* (A-Star) 算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。公式表示为: 其中,f(n) 是从初始状态经由状态到目标状态的代价估计,g(n) 是在状态空间中从初始状态到状态的实际代价,h(n) 是从状态到目标状态的最佳路径的估计代价。(对于路径搜索问题,状态就是图中的节点,代价就是距离...原创 2019-11-26 14:47:56 · 184 阅读 · 0 评论 -
二维三维偏序
一维偏序::就是排序,二维偏序:排序+树状数组:例题: 给定 n 个点(x,y),定义每个点的等级是在该点左下方(含正左、正下)的点的数目,试统计每个等级有多少个点。题目链接分析:对于二维偏序:对1维x进行排序,那么在右边的点不会对左边的点有贡献。然后对y建立树状数组。计算0-y的和,就是sum[y]; #include <bits/stdc++.h> using ...原创 2019-10-14 19:32:09 · 195 阅读 · 0 评论 -
线状数组
线状数组是一个查询和复杂度都是log(n)的数据结构,主要用来查询任意两位之间的所有元素之和,但每次只能修改一个元素的值,数组a[]— 用来存放原始数据,c[]–就是树状数组,c[t] – 表示t管辖区间元素之和。c[t] --管辖里2k个区间,k是t在二进制下末尾0的个数例如:8=(1000),那么管辖23=8个数。例如5 = (101)那么管辖20=1个数;下面这个图非常直观;如何计...原创 2019-10-14 12:03:30 · 553 阅读 · 1 评论 -
后缀数组
后缀数组模板:const int maxn = 1e5+5;//开总串长度,不要忘记连接符int wa[maxn],wb[maxn],wsf[maxn],wv[maxn],sa[maxn];int rank[maxn],height[maxn],s[maxn];char str1[maxn],str2[maxn];//sa:字典序中排第i位的起始位置在str中第sa[i] sa[1~...原创 2019-10-12 12:17:44 · 255 阅读 · 0 评论 -
牛客练习题52--数数
一个数学问题,知道了就做出一半了,然后求幂,取模,就差不多了。不知道的就只能……#include <iostream>#include <stdio.h>#include <algorithm>#define mod 998244353using namespace std;long long dapow(long long a,long lon...原创 2019-09-25 10:31:00 · 133 阅读 · 0 评论 -
固定长度的路径数
固定长度的路径数我们有一个有向的,未加权的图G,有n个顶点,我们有一个整数k,任务如下:对于每一对顶点(i,j),我们必须找到这些顶点之间长度为k的路径的数量。路径不必简单,也就是说,顶点和边可以在一条路径中访问任意次数。分析:我们假设图是用邻接矩阵指定的,即大小为n×n的矩阵G[][],其中,如果顶点i与j通过一条边相连,则每个元素G[i][j]都等于1,0为它们不通过一条边相连。下面的算...原创 2019-09-24 17:15:02 · 1049 阅读 · 0 评论 -
BZOJ 1041圆上的整点 题解与分析
给定一个半径R<2000000000;求以(0,0)为圆心的圆上有多少个整数点:在这里直接给出代码:解析参考:这篇博客#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#include<iostream>#include&l...原创 2019-09-23 21:08:56 · 194 阅读 · 0 评论 -
(2019上海网络赛) F. Rhyme scheme (dp)
题目链接题意:输出长度为n的第k小的Rhyme scheme字符串.Rhyme scheme: 长度为n的个数是bell number的例子Rhyme scheme字符串:目前的字母最大是前面出现过的字母+1,即AABC是符合的,AACB是不符合的,因为C前面没有出现B。题目要求输出长度为n的字典序第k小的 Rhyme scheme字符串。有一万个样例,每个样例输入一个n和k,表示长度...原创 2019-09-23 20:32:36 · 292 阅读 · 0 评论 -
其他计算几何
POJ1654【基础】题目大意:本质上是给出三角形求其垂心(证明比较容易这里略去)。输入:第一行有一个整数n,表示有n组测试数据。每一组测试数据有三行,每一行有两个空格分隔的小数,表示一个三角形顶点的x y坐标。输出:每一组测试数据输出一行,包含两个空格分隔的四位小数,表示垂心的x y坐标。...原创 2019-09-28 09:12:11 · 162 阅读 · 0 评论 -
LCT入门(动态树)(点权)(边权)
LCT的用途:1,在线链接link&cut(连接边,删除边)2,查询连通性3,维护链上信息4,换根5,维护子树信息。等等:基础知识:1.伸展树(Splay Tree):支持链上求和,求最值,修改,等等操作,2LCT(link cut tree):是一棵树,长这样:这上面有一些粗一点的边,我们把它称为重边;还有一些细一点的,我们把它称为轻边。基本函数功能介绍:ac...原创 2019-09-23 17:26:14 · 1968 阅读 · 0 评论 -
项链,区间不同数字和,树状数组
题意:HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答……因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。输入格式第一行:一个整数N,表示项链的长度。...原创 2019-09-25 16:30:47 · 119 阅读 · 0 评论 -
半平面交
什么是半平面:半平面就是指平面的一半,我们知道,一条直线可以将平面分为两个部分,那么这两个部分就叫做两个半平面。半平面怎么表示呢: 二维坐标系下,直线可以表示为ax + by + c = 0,那么两个半平面则可以表示为ax + by + c >= 0 和ax + by + c < 0,这就是半平面的表示方法。半平面的交: 其实就是一个方程组,让你画出满足若干个式子的坐标系上的区域(...原创 2019-09-26 17:38:32 · 1064 阅读 · 0 评论 -
多边形问题
求多边形面积:(向量法)题目大意:一个机器人站在坐标系的原点,每一次可以沿平行于坐标轴方向走 1 个单位到下一个整点或者沿对角线方向走 sqrt(2)个单位到下一个顶点。给出一个步行序列,保证机器人最后回到原点,求其走的路线围成的多边形的面积。步行序列中的 2、4、6、8 分别表示向南、东、西、北走一格(东和北是 x y 轴的正方向),1、3、7、9 分别是东北、西北、东南和西南,5 只会在序...原创 2019-09-27 11:48:48 · 393 阅读 · 0 评论 -
凸包
概念用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点。例子:假设平面上有p0~p12共13个点,过某些点作一个多边形,使这个多边形能把所有点都“包”起来。当这个多边形是凸多边形的时候,我们就叫它“凸包”。如下图:求解(Graham扫描算法)时间复杂度:O(nlogn)思路:Graham扫描的思想是先找到凸包上的一个点,然后从那个...原创 2019-09-29 17:35:56 · 392 阅读 · 0 评论 -
无向图中环的问题
求简单无向图中环的个数?简单无向图即 无自环,无重边的无向图。这个是NP问题; codeforces 上有一题用的是状态压缩写的。dp[s][i] s集合里最小的点到其他点的路径数;dp[s][i] += dp[s^(1<<i)]jans加上可以构成环的路径数.怎么才能构成环呢? 如a->b->…->c ,如果知道ac是可达的,只要加上a,经过ab…到达c的...原创 2019-10-05 17:08:29 · 589 阅读 · 0 评论 -
无向图问题(树形dp)
文章来自:https://www.cnblogs.com/seaupnice/p/9471700.html例一:一个树,每个点有一个“快乐”值,父子结点不能同时快乐,问这个结构的最大快乐值。分析:dp[i][0]:表示不邀请i员工其子树达到的最大快乐值,dp[i][1]则表示邀请。#include <cstdio>#include <iostream>#inc...原创 2019-10-06 10:48:25 · 595 阅读 · 0 评论 -
中国剩余定理(CRT)(同余)
首先给出模板: int CRT(int a[],int m[],int n) { int M = 1; int ans = 0; for(int i=1; i<=n; i++) M *= m[i]; for(int i=1; i<=n; i++) { int x, y; int ...原创 2019-09-10 20:49:38 · 775 阅读 · 0 评论 -
01背包(2019上海网络赛 J Stone game)
**题意:**给定 n 块石头,每一块重量为 ai ,现在要求你选取一些石头组成第一堆,剩下的石头组成第二堆,要求第一堆石头的总重量大于等于第二堆,并且若从第一堆石头中任取一块石头,剩下的总重量需要小于等于第二堆,求取法的方案数。分析:说是任取。。其实只要取第一堆中最小的石头后满足条件,那么这个堆就是一种合理的取法。所以我们可以把所有石头从大到小排序,并设 dp[k] 表示第一堆石头总重量为 k...原创 2019-09-22 15:14:15 · 166 阅读 · 0 评论 -
莫比乌斯反演入门
基础1.唯一分解定理:,任何正整数n可分解为若干素数的幂方积2这个符号表示:对n的所有正因子求和,如:3莫比乌斯函数:原创 2019-09-21 18:47:13 · 146 阅读 · 0 评论 -
XKC's basketball team(线段树)
线段树的模板 //这个是区间的最大值。 #define maxn 1000005 #define mod 1000000007 int a[maxn]; struct node { int l,r,ma; }tree[maxn*4]; void build(int l,int r,int p) //表示当前节点的标号,也就是根节点的编号。 { t...原创 2019-09-11 11:48:53 · 181 阅读 · 0 评论 -
so busy
题目的大意是:下标1-n,有n个点,对这些点有两种操作:z = 1:删除下标为x的点,z=2,:查询x点之后第一个存在的点;:解题思路:由于这次操作的数比较大,且多,使用的是unordered_set s;(是利用哈希存储,所以查找起来十分快速)将每一个删掉的数的下标放进这个集合中,只需查找下一个下标是否也被删除掉了。代码: #include <iostream>...原创 2019-09-11 11:06:42 · 665 阅读 · 0 评论 -
并查集
https://blog.csdn.net/dellaserss/article/details/7724401;https://www.cnblogs.com/MrSaver/p/9607552.html原创 2019-09-10 21:44:38 · 84 阅读 · 0 评论 -
斐波那契博弈,
有一堆个数为n的石子,游戏双方轮流取石子,满足:1)先手不能在第一次把所有的石子取完;2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。约定取走最后一个石子的人为赢家,求必败态。1先手胜当且仅当n不是Fibonacci数在介绍一个定理:2Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和。...原创 2019-09-10 21:23:44 · 185 阅读 · 0 评论 -
Center
大意:给定一个点集,该点集在二维平面上有nn个点,您的任务是找到需要添加到该点集的最小点数,以便该集中的所有点都是中心对称的。所有的点都是中心对称的意味着你可以找到一个中心点,此点不一定在点集中。https://blog.csdn.net/dong2022214184/article/details/100672759https://blog.csdn.net/weixin_43900869...原创 2019-09-10 12:35:47 · 126 阅读 · 0 评论 -
回文树
假设我们有一个串S,S下标从0开始,则回文树能做到如下几点:1.求串S前缀0~i内本质不同回文串的个数(两个串长度不同或者长度相同且至少有一个字符不同便是本质不同)2.求串S内每一个本质不同回文串出现的次数3.求串S内回文串的个数(其实就是1和2结合起来)4.求以下标i结尾的回文串的个数模板:const int MAXN = 100005 ; const int N = 26 ; ...原创 2019-09-10 11:20:14 · 99 阅读 · 0 评论 -
算法相关网站
UVA原网站:https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=827;洛谷原创 2019-09-09 18:44:34 · 114 阅读 · 0 评论 -
Colorful String
题目意思就是:字符串s的值等于此字符串中出现的不同字母的数量。 您的任务是计算所有回文子串的总值。第一种: #include <iostream> #define maxl 300005 #define ll long long using namespace std; char s[maxl], s2[maxl << 1]; int R[maxl <...原创 2019-09-09 10:16:13 · 238 阅读 · 0 评论 -
马拉车算法(解决最长回文串)
一:返回最长回文串的字符个数 #include<iostream> #include<cstdio> # include<string.h> using namespace std; const int maxn = 100010; char ma[maxn << 1],s[maxn]; int mp[maxn << 1]...原创 2019-09-13 09:35:57 · 134 阅读 · 0 评论 -
POJ2411 状态压缩DP(矩阵填块)
题目:给你nm(1<=n,m<=11)的方格矩阵,要求用12的多米诺骨牌去填充,问有多少种填充方法。分析:首先我们定义如下这种填充表示方式:如果一个骨牌是横着放的,那么它所在的两个方格都填充1.如果它是竖着放的,那么它所在的两个格子中,上面的那个填0,下面的这个填1.如下图所示:该矩阵的骨牌摆放方法和该矩阵的二进制表示法是一一对应的。对于任意连续的两行i-1和i行来说,第i-...原创 2019-09-13 10:13:29 · 140 阅读 · 0 评论 -
欧拉函数,扩展欧拉降幂
欧拉函数phi[n]—表示下于n且与n互质的整数的个数。模板:#include <cmath>#include <cstdio>#include <iostream>#define il inline#define MAXN 200100# include<iostream># define ll long longusing n...原创 2019-09-21 16:45:04 · 133 阅读 · 0 评论 -
FFT,(大数乘法)
多项式系数表示法:多项式点值表示法系数表示法算多项式乘法的时间复杂度是O(n^2),而通过点值表示法我们可以发现两个多项式P,Q,同时取点x时,得到的是y1和y2,即取到的点分别为(x,y1),(x,y2)而PQ会取到的点为(x,y1y2),那么计算P*Q的点表达式的时间复杂度就是O(n)的。FFT就是将系数表示法转化成点值表示法相乘,再由点值表示法转化为系数表示法的过程,第一个过程叫做...原创 2019-09-20 10:37:15 · 563 阅读 · 0 评论 -
普通生成函数(母函数)
生成函数在数学中,某个序列(an)的母函数(又称生成函数,英语:Generating function)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。母函数可分为很多种,包括普通母函数、指数母函数、L级数、贝尔级数和狄利克雷级数。对每个序列都可以写出以上每个类型的一个母函数。构造母函数的目的一般是为了解决某个特定的问题,因此选用何种母函数视...原创 2019-09-18 11:35:51 · 569 阅读 · 0 评论 -
2019 南昌网络赛C Hello 2019 线段树维护矩阵(dp)
题目链接题意:给你n个数,每次问你l到r区间中至少要去掉几个数使得剩下的数中含有9102序列而不含8102序列题解:先把整个串倒过来,这样题目就转化成含2019而不含2018序列。用线段树存储这个数字串,每一个节点都有一个状态方程,设a[i][j]为状态i转移到状态j需要删除的最小数,我们用矩阵来表示这个a。总共5个状态状态0-null 空状态1-2状态2-20状态3-201...原创 2019-09-17 17:05:28 · 148 阅读 · 0 评论 -
2019南昌B. Fire-Fighting Hero(迪杰斯特拉)
题目链接Problem DescriptionThis is an era of team success, but also an era of heroes. Throughout the ages, there have been numerous examples of using the few to defeat the many. There are V VV (Numbers ...原创 2019-09-16 21:44:45 · 218 阅读 · 0 评论 -
迪杰斯特拉(模板)
#include <bits/stdc++.h> #define pi acos(-1.0) #define ll long long #define ull unsigned long long #define esp 1e-9 #define inf 0x3f3f3f3f #define inff 0x3f3f3f3f3f3f3f3f #define Pair pa...原创 2019-09-16 21:31:51 · 193 阅读 · 0 评论 -
SPFA(求最短路径)
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路,但这不是我们讨论的重点。模板: #include <iostream> #include <cs...原创 2019-09-14 11:00:38 · 345 阅读 · 0 评论 -
最长递增子序列o(nlogn)
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 9 //数组元素个数 int array[N] = {2, 1, 6, 3, 5, 4, 8, 7, 9}; //原数组 int B[N]; ...原创 2019-09-14 09:59:32 · 368 阅读 · 0 评论