02 2022 档案
摘要:最短路 单源最短路 Dijkstra算法 边权非负 # include <bits/stdc++.h>using namespace std;typedef long long LL;struct Dijkstra{ #define MAXN 1234 #define INF 0x3f3f3f3f
阅读全文
摘要:最小生成树 一、Krustral 克鲁斯卡尔算法 /* https://vjudge.net/problem/HDU-1863 复杂度 E*log(E) 适用于稀疏图*/# include <bits/stdc++.h>using namespace std;const int MAXN=100+
阅读全文
摘要:G Lucky 7 in the Pocket 签到题,然而因为刚睡醒打错一个字母WA了三次,还活生生改不出来,重构才过,?,队友们,我对不起你们。。。 # include <bits/stdc++.h> using namespace std; int main() { int t; scanf(
阅读全文
摘要:二分图带权最大匹配(二分图最优匹配) KM算法在稠密图上效率高于费用流。局限性:只能在满足“带权最大匹配一定是完备匹配”的途中正确求解。 若相等子图中存在完备匹配,则这个完备匹配就是二分图的带权最大匹配。 KM算法 O(n^4) 1-N 和 0 -N 全局一致; u和v一致; # include <
阅读全文
摘要:Trie const int maxnode=1e6+100;const int sigma_size=26;struct Trie{ int ch[maxnode][sigma_size];//存储节点信息,构造为树,ch[i][j]表示第i个节点字母j的节点的位置 int val[maxnode
阅读全文
摘要:1004 Vacation 说是大模拟,其实应该还是算一个思维题,想到了就可以比较简单的写出来,不然就是像我一样写两个半小时出来疯狂wa,还是太菜了QAQ 第一种解法: 二分时间,感觉这种解法对这类题目应该都可以,只要数据稍微友好一点,不要精度不够,double因该是不会爆掉的,他的数据范围很大 b
阅读全文
摘要:v> A 应为数据范围很小可以直接暴力判断 C 规律也想到了,但是想歪了一个点,就是如果当前数量比较小的话,那么之前比他数量大的应该全部都 加进来,而不是只加一部分。 注意初始化 D 想到了一个规律,但是无意识的忽略了题目应该是如果尺寸满足就全部应该是发体恤的,不能只发一部 分 E 博弈论SG函数又
阅读全文
摘要:A # include <bits/stdc++.h> using namespace std; int main() { int n,m; int c; scanf("%d %d",&n,&m); if(m==0){ printf("1"); }else{ c=n-m; printf("%d",m
阅读全文
摘要:后缀数组 # include <bits/stdc++.h> using namespace std; typedef long long LL; const int MAXN=1e5+100;int wa[MAXN],wb[MAXN],wv[MAXN],wt[MAXN]; int cmp(int
阅读全文
摘要:Hash 一、Hash表 # include <bits/stdc++.h>using namespace std;const int MAXN=1e5+100;const int mod=99991;int tot=0;int snow[MAXN][10],a[10];int head[MAXN
阅读全文
摘要:最小表示法 # include <bits/stdc++.h>using namespace std;//字符串从1开始存储 const int MAXN=1e5+100;char s[MAXN]; //需要定义为长度的两倍 int ans=0,n=0;void B(int id){ for(in
阅读全文
摘要:KMP f数组即为next数组,表示回退位置和以当前为结尾匹配长度 # include <bits/stdc++.h>using namespace std;//字符串从0开始存储 next数组从1开始算起const int MAXN=1e3+100;int f[MAXN];char ch[MAX
阅读全文
摘要:拓扑排序 # include <bits/stdc++.h>using namespace std;const int LEN_of_Node=1e4+100;const int LEN_of_Edge=2e4+100;int cnt;int n,m;int num;struct Edge{ in
阅读全文
摘要:无向图的割点和桥 1.割点 # include <bits/stdc++.h>using namespace std;const int MAXN=2e4+100;vector<int> G[MAXN];int dfn[MAXN],iscut[MAXN],low[MAXN]; //iscut[i]
阅读全文
摘要:v> A 签到题 B 其实一个贪心就过了,只有前面比后面快才能讲水一处到下一个也就是说会加速后面灌水,但是如果前 面比后面慢反而会托慢后面的速度,所以最后一个何时满处取决于包括最后一个在内的最慢的那一个时 间。何时所有水池都灌满取决于从前往后遍历的最慢的那一块,如果后一个比前一个慢则但钱的则为正 确
阅读全文
摘要:Manacher 最长回文子串 /*https://www.cnblogs.com/fan1-happy/p/11166182.html*/# include <bits/stdc++.h>using namespace std;const int MAXN=2e7+100;char s[MAXN
阅读全文
摘要:v> 丢失的数字 签到题,WA1发,数组名字还是要根据所存的数据的意义取名字,最好不要取a,aa这样的数组容易混淆 同学聚会 注意题意的理解,避免在书写过程中出现重构的现象 最大岛屿 数组范围一开始就要写对 下大雪了 强连通分量模板题 上课点名 vector 的insert复杂度理论上是O(n) ,
阅读全文
摘要:v> 4969 A &符号,一般取决于1个数稍等那一个,画出n^2图,找一下瑰丽就可以知道了 B 全部写出来即可找到规律,T了的话,可以剪枝,把小的那一些直接输出,不计算 C 排序,把一样的放在一起,也可认为是排序,和排序,位置有关的只要是复杂度允许都可以想到逆序对 问题。逆序对原本就是顺序逆过来的
阅读全文
摘要:v> wxy 3.20 牛客练习赛55重现 4954 A 签到题 B 大胆猜测小心验证,一定要从反面验证 C 如果是定义题的话,一定要从定义出发,不能想当然 除和取模:要先除才能取模,不能先取模再除 E 式子可以拆开分解,lca的定义再次加深理解,如果i,j的lca是x的话,那么i,j分别来自x的不
阅读全文
摘要:v> A 签到题 考虑全面,是否需要和0进行比较 G 思维题 aa bb 这样的直接交换第一个a和第二个b就可以了 ab ba那么先通过一次交换把他变成上面哪一种情况,再交换即可 F 还是写的太慢了,卡了好久。。。其实有更简便的方法的 就是计算前面有多少是可以到该点是符合要求的,每遇到一次0就更新一
阅读全文
摘要:v> 5057 B 对于树状数组的理解,add不仅仅是加,可以为减,就是如果一个区间内莫格数不要的话,可以在相应 的位置上add原来的负数 求区间的和,如果一个数在该区间上出现多次,那么只加一次 # include <bits/stdc++.h> using namespace std; typed
阅读全文
摘要:v> 5062 C 赛时解法 直接线性规划啊,2 * a+4 * b<=x和 3*a+b<=y 相加就是 ( a+b ) <=(x+y)/5 x->x-x%2,应为a,b一定是正 整数,所以考虑交点不在第一象限的情况, b或者a/2 # include <bits/stdc++.h> using n
阅读全文
摘要:v> wxy 3.31 牛客练习赛60重现 5075 A 看到位运算,可以往二进制方面去想,可以把1-n所有的的每位放到相应的位置上,然后遍历所有的 数,每次都把他拆分成二进制和刚刚统计的那些数的每位进行与运算 C DP 设dp[ i ] [ j ]表示前i个,长度为j的本质不同的子序列有多少,那么
阅读全文
摘要:v> wxy 4.2 # 13 A 签到 B 先写了B,但是因为考虑不全面,WA了。。三发,然后自闭了然后去写C,C是一个思维题,可能由受 到B的影响,然后一直想不出来,。。,比赛就卡在这个地方,卡了将近一个小时。。。 B卡的地方就是,的确是要按照增价来排序,但是还要考虑原价,就是每单位原价所造成的
阅读全文
摘要:v> wxy 4.12 牛客练习赛61 重现 5317 A 签到题 对于特殊情况的判断条件要考虑全面,且如果有除的情况的话要考虑是否有浮点储物的可能。 签到题如果wa了的话,不要太care,不要影响心情。 B 猜中结论顺利A题,这种题一般就是快速找到结论,然后小心求证是否需要分类讨论,赛后再去求证结
阅读全文
摘要:v> wxy 4.14 #15 [Cloned] 活生生把ACM赛制打成OI赛制的一场,就交了签到题然后就一直in queue还好都一发A了,刺激。 A 写得有点慢了,刚开始对应关系弄反了,采用模块化的设计思想,直接先解决对应关系搞一个数组就可 以了。然后看转换后的字符串是否所有的字母都是存在的即可
阅读全文
摘要:v> wxy 4.5 牛客练习赛51重现 5163 A 题目中的子串和现实中的子串也许定义不一样,要注意区分按照题目来。 题解解法:做一个前缀和一个后缀,前缀和sum1[i ]记录位置1...i中a的个数,后缀和sum2[i ]记录i...n 中c的个数。从前往后枚举字符串的所有位置,如果当前位置i
阅读全文
摘要:v> wxy 4.9 牛客训练赛50重现 5220 A 给一个字符串,如果相同的字母都连在一起,那么就是令人心情愉悦。如果前面和现在是同一个字母, 那么就更新该字母的位置,如果前面不是该字母但是该字母的,f数组之前更新过,那么就说明这个字母 不只一段。 题解从总长度入手。 B 模拟hash散列表的操
阅读全文
摘要:大意就是每次给一个矩形就会覆盖之前的矩形的部分,且保证(x [ i ] <= x [ j ] y [ i ] <= y [ j ] )不同时出现,那么就是用一个set存一下x和y,逆序,对于每次的x或者y,如果是比当前最小的还要小,那么就是直接加上这个数,否则就是找当前set里面比他小的离他最近的那
阅读全文
摘要:v> wxy 3.10 牛客练习赛56 重现 4841 B 考虑一条边,从左边过去和从右边过来经过的分别为两个子树的大小和人数乘积的和的两倍,想到有点 类似于换根DP和树形DP,但是LL要和lld相匹配要注意。 C 朴素做法是n^2*k的,考虑到转移的时候是前缀和,前缀和==区间和,想到树状数组,f
阅读全文
摘要:无向图的双连通分量 1.点双连通分量 v-DCC 性质:1.顶点数不超过2 2.图中任意两点都同时包含在至少一个简单环中 3.如果该分量里有一个奇圈,那么其他所有点也必然在某个奇圈中;含有一个奇圈的充要条件是该分量不是二分图。 注意:割点的bccno可以是有多种选择,不一定是想要的那一个 最小方案数
阅读全文
摘要:v> wxy 3.3 牛客练习赛58重现 4756 C 没有办法都枚举的话,就枚举一维剩下一维可以凑,考虑用二进制枚举取哪些行,然后用剩下的列数中 的最大的前几个凑足k。复杂度最差2^15 * 15* 15。 D 棋盘DP【DP真是思维的体操啊,一看就会,一做就废,QAQ】 如果右边没有障碍,那么就
阅读全文
摘要:v> wxy 2.27 #8 A 给出一些字母模拟加法,要求相同字母用相同数字代替,不同字母用不同数字代替,开头的字母不能用 0代替。 应为题目保证最多只有是个不同的字母,dfs搜索每个字母应该匹配什么数字,复杂度为10! =3628800,然后对于所匹配好的字母和数字进行check看是否满足式子,
阅读全文
摘要:A # include <bits/stdc++.h> using namespace std; typedef long long LL; const LL MAXN=1e5+10; LL a[MAXN]; LL b[MAXN]; int main() { LL n,m; LL ao=0,ae=0
阅读全文
摘要:A # include <bits/stdc++.h> using namespace std; typedef long long LL; int f[10]; int main() { LL n; LL sum=0; scanf("%lld",&n); LL nn=n; LL ans=0; wh
阅读全文
摘要:A # include <bits/stdc++.h> using namespace std; int main() { int n; int flag=1; string a; scanf("%d",&n); cin>>a; for(int i=1;i<n;i++){ if(a[i]<a[i-1
阅读全文
摘要:A # include <bits/stdc++.h> using namespace std; const int INF=1e9; int f[55]; int main() { int n; int len=INF; string s; char b[4]={'A','C','T','G'};
阅读全文
摘要:v> wxy 2.24 #7 NCPC2012 一开始先看了B了,花了一个小时心态也炸了,。。。, H 心态炸了之后就不太稳了,就是一个bfs和一个逻辑上的思维 只要按照bfs遍历,然后搞清楚,只有之前没有遍历到的才要修改值,否者再修改会变大。再有可以再 inf的基础上+1,对后面结果没有映像,因为
阅读全文
摘要:A # include <bits/stdc++.h> using namespace std; typedef long long LL; LL s[40]; LL b[40]; bool cmp(LL a,LL b) { return a>b; } int main() { LL n,m,r;
阅读全文
摘要:v> WXY 2.20 #6 J dfs从两边向中间访问,还要加上把当前的所有放在一起的情况 I 只要从下到上遍历一边,看是否有一行是把左右边界都封住的就可以。 用并查集维护,如果两个圆相交那么就加入到一个并查集里面。然后遍历所有的圆,如果该圆和左边界 相交,那么把这个集合的左边界打标记,有边界也一
阅读全文
摘要:A # include <bits/stdc++.h> using namespace std; pair<int,int> b[300100]; pair<int,int> e[300100]; int main() { int n; int a; cin>>n; for(int i=1;i<=n
阅读全文
摘要:A # include <bits/stdc++.h> using namespace std; int main() { int n,flag=1,minn=27,maxx=0; string a; int f[30]; cin>>n; memset(f,0,sizeof(f)); for(int
阅读全文
摘要:A # include <bits/stdc++.h> using namespace std; typedef long long LL; int a[110]; LL sum=0; int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++){
阅读全文
摘要:A. DIY Wooden Ladder 签到题,比较现在能够有的阶梯数和规定的阶梯数就可以了 # include <bits/stdc++.h> using namespace std; const int MAXN=1e5+100; int a[MAXN]; int cmp(int a,int
阅读全文
摘要:是真的蠢啊,在AB两题签到题卡了一个小时,QAQ A. Three Piles of Candies 签到题,其实把三个加起来除以二就可以了 # include<bits/stdc++.h> using namespace std; typedef long long LL; int main()
阅读全文
摘要:A # include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { LL x[5]; LL a,b,c; scanf("%lld %lld %lld %lld",&x[0],&x[1],&x[2],&
阅读全文
摘要:分类讨论场,做完签到感觉就和我没什么关系了,日后补题 A Eating Soup 就是判断是否可以每个一组,是按照分隔计数的符合现实,还是按照剩余计数的符合现实。当然还有特判的,就是是否是没有分割的 # include <bits/stdc++.h> using namespace std; int
阅读全文
摘要:A. Inscribed Figures 题意:就是1 2 3分别代表 圆 等腰三角形 正方形,然后往每一个图形里面套下一个图形,求最后的相交点总共有多少个(题意还是有点难懂的,(我不会说是他题目一开始改来改去的我有点懵逼),其实是我菜吧。。。) 分析: # include <bits/stdc++
阅读全文
摘要:A. Reachable Numbers 可以发现一个规律,就是到达一个数直到那个数的最后一位为0,数的位数才会变。而且还有一个坑点就是一位数,到达一个数,那么一位数的所有数都可以到达 # include <bits/stdc++.h> using namespace std; typedef lo
阅读全文
摘要:有向图的强连通分量 1.Tarjan O(V+E) dfn[u]表示dfs时达到顶点u的次序号(时间戳),low[u]表示以u为根节点的dfs树中次序号最小的顶点的次序号,所以当dfn[u]=low[u]时,以u为根的搜索子树上所有节点是一个强连通分量。 先将顶点u入栈,dfn[u]=low[u]=
阅读全文
摘要:A. Reverse a Substring 就是反转一部分字符串,然后让字符串按照字典序变小,那么只要有一块时降序就可以了 # include <bits/stdc++.h> using namespace std; int main() { int n; int flag=1; string a
阅读全文
摘要:A. Neko Finds Grapes A就是钥匙和锁上的数字的和为奇数就行。 odd+even=odd odd+odd=even even+even=even 所以只要保证奇数和偶数加就行,就是用奇数的锁去配对偶数的钥匙,偶数的锁去配对奇数的钥匙 # include <bits/stdc++.h
阅读全文
摘要:A - Stickers and Toys 题目大意就是有n个鸡蛋,然后有s个彩带(吧?忘记了)和t个玩具,问至少要拿几次鸡蛋才有可能拿到一个彩带和一个鸡蛋。 就是可以分成三部分来算,就是a表示只有彩带的鸡蛋,b表示只有玩具的鸡蛋,c表示既有彩带又有玩具的鸡蛋。然后在a,b中取最大然后再+1就可以。
阅读全文
摘要:A. Vus the Cossack and a Contest 签到题,比较一下m,k只要之中小的大于等于n就可以 # include <bits/stdc++.h> using namespace std; int main() { int n,m,k; cin>>n>>m>>k; int mi
阅读全文
摘要:A. Remove a Progression 签到题,观察可得规律,每次删除的是奇数,所以只要把x*2输出即可,因为输出第几个偶数 # include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { i
阅读全文
摘要:A. Stock Arbitraging 签到题,买股票,就是买的价格分别为si,卖的价格分别为bi,用最少的钱买进,用最大的价格卖出,还有别忘记加上买股票是剩下的钱。 # include <bits/stdc++.h> using namespace std; typedef long long
阅读全文
摘要:A. Nearest Interesting Number 就是要求离所给的数最近的所有位数的和能被4整除的数,那么直接从所给的数开始,然后一个一个求就可以了,复杂度不高,不会T; # include <bits/stdc++.h> using namespace std; int main() {
阅读全文
摘要:A. Drinks Choosing 签到题,就是对每一种饮料都可以拿好多次,在拿饮料总和有限的条件下,问最多能够满足多少人 # include <bits/stdc++.h> using namespace std; const int MAXN=1e3+100; int a[MAXN]; int
阅读全文
摘要:网络流之最大流 流函数三大性质: 1)容量限制:f(x,y) <= c(x,y) 2)斜对称:f(x,y)=-f(y,x) 3)流量守恒:x!=S,x!=T,Σf(u,x)=Σf(x,v) c(x,y)=0说明该条边不在图中,同时f(x,y)<=0 最大流 EK算法 O(ve^2) 10^3--10
阅读全文
摘要:图论结论 1.任意一个有6个顶点的简单图或其补图一定包含一个三角形(Ramsey定理) 网络流之最大流 流函数三大性质: 1)容量限制:f(x,y) <= c(x,y) 2)斜对称:f(x,y)=-f(y,x) 3)流量守恒:x!=S,x!=T,Σf(u,x)=Σf(x,v) c(x,y)=0说明该
阅读全文
摘要:无向图的联通分量 const int MAXN=1e4+100;vector<int> G[MAXN];bool vis[MAXN];void dfs(int u){ for(int i=0;i<G[u].size();++i){ if(!vis[G[u][i]]){ vis[G[u][i]]=1;
阅读全文
摘要:二分图最大匹配 增广路的性质: 1).长度是奇数 2).路径上第1,3,5...,len条边是非匹配边,第2,4,6,...,len-1条边是匹配边。 二分图的一组匹配S是最大匹配,当且仅当图中不存在S的增广路 相关定理: 完备匹配:给定一张二分图,其左部、右部节点数相同,均为N个节点。如果该二 分
阅读全文
摘要:J Fraction Comparision 签到题 __int128 A Equivalent Prefixes 单调栈 B Integration 数学题,微积分 C Euclidean Distance 前缀和 F Random Point in Triangle概率+几何 A Equival
阅读全文
摘要:数据结构和图论易错点 Edge &t=egde[i] 初始化是否完全 空间是否开够了 是否需要LL
阅读全文
摘要:树的直径 1.树形DP求树的直径 void dp(int x){ v[x]=1; for(int i=head[x];~i;i=edge[i].next){ Edge e=edge[i]; if(v[e.to]) continue; dp(e.to); ans=max(ans,d[x]+d[e.to
阅读全文
摘要:三种存图方式 1.邻接矩阵 2.邻接表 邻接表是一种对于每个顶点,用链表来存储以该点为起点的边的数据结构。 # include <bits/stdc++.h>using namespace std;const int MAXN=250;struct Edge{ int to,w,next;}edg
阅读全文
摘要:树上差分 # include <bits/stdc++.h>using namespace std;const int MAXN=1e5+100;struct Edge{ int to,w,next;}edge[MAXN<<1];int head[MAXN];int tot=0;void add(
阅读全文
摘要:二分图染色判断 判断图中不存在奇数环 O(n+m) //P1155# include <bits/stdc++.h>using namespace std;const int MAXN=1e3+100;vector<int> G[MAXN];int color[MAXN];int bipart(i
阅读全文
摘要:1004 Wave DP 1006 String 概率 1007 Traffic 逆向思维(出去不可以的,剩下的取最小) 1008 Rng 打表找规律 1009 Budget 四舍五入,字符串 1010 Worker LCM 1011 Class 签到,数的运算 1004 Wave 对于每一个新出现
阅读全文
摘要:LCA 1.向上标记 2.树上倍增 O((n+m)log n) # include <bits/stdc++.h>using namespace std;const int MAXN=5e4+100;struct Edge{ int next,to,w;}edge[MAXN<<1];int tot
阅读全文
摘要:树 树的DFS序 void dfs(int x){ a[++m]=x; //a数组存储DFS序 v[x]=1; //记录点x被访问过 for(int i=head[x];i;i=next[i]){ int y=ver[i]; if(v[y]) continue; dfs(y); } a[++m]=x
阅读全文
摘要:A* 定点第k短路 # include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN=1e3+100,MAXM=1e5+100;#define INF 123456789int n,m,s,t,k;st
阅读全文
摘要:手动开栈 #pragma comment(linker, “/STACK:1024000000,1024000000”)
阅读全文
摘要:分块 1.在线求区间众数问题 # include <bits/stdc++.h>using namespace std;const int MAXN=4e4+100;int a[MAXN],pos[MAXN],val[MAXN],cnt[MAXN],mn[1000][1000];int t;map
阅读全文
摘要:线段树 修改和查询时间复杂度都为 log n 区间加减 区间求和 区间最大最小 //注意会影响常数# include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN=1e6+7;const LL INF=
阅读全文
摘要:树状数组 一、区间求和&&单点修改 树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于数组的单点修改&&区间求和 C [ i ] = A [ i - 2^k + 1 ] + A [ i - 2^k + 2 ] + ...... A [ i ] ; (k为i的二进制中从最低位到高位连续
阅读全文
摘要:对顶栈 【题意】模拟编辑器 算法进阶P50 【题解】对顶栈,(1)对于当前的sum求和的时候下标直接用当前前面的一个栈的size代替就可以;(2)还要注意字符的读入空格会有影响要加getchar;(3)还有stack.pop()之前要注意判断stack是不是空的。 # include <bits/s
阅读全文
摘要:二分和三分 二分查找 二分的精度问题,一般用double解决,eps=1e-8,关于l,r的取值看那个区间有没有可能取到,然后-1或者+1,会不会使得值变化得特别大,如果会变化得特别大,那么就l,r都取mid O(log n) //查找一个数int b_Search(int x){ int l,r,
阅读全文
摘要:二叉平衡树 # include <bits/stdc++.h> using namespace std;const int MAXN=100;struct SBT{ char data; int l,r;}Tree[MAXN];int tot=0,root=0;int Build(char a)/
阅读全文
摘要:可持久化可并堆 貌似和前k大有关,k短路好像也可以 1、插入一个指定元素(时空复杂度:O(logn)) 2、删除一个指定迭代器(时空复杂度:O(logn)) 3、查询堆顶元素(时空复杂度:O(1)) 4、合并两个堆,并且支持自己合并自己(时空复杂度:O(logn)) 5、将一个堆中的所有元素都加上或
阅读全文
摘要:分块 1.在线求区间众数问题 # include <bits/stdc++.h>using namespace std;const int MAXN=4e4+100;int a[MAXN],pos[MAXN],val[MAXN],cnt[MAXN],mn[1000][1000];int t;map
阅读全文
摘要:class Trie {private: bool isend; vector<Trie*> children; Trie* searchPrefix(string prefix){ Trie* node=this; for(char ch:prefix){ int id=ch-'a'; if(no
阅读全文
摘要:并查集 //路径压缩//路径压缩,就是在每次查找时,令查找路径上的每个节点都直接指向根节点# include <bits/stdc++.h>using namespace std;const int MAXN=1e5+7;int father[MAXN];void MakeSet(int n){
阅读全文
摘要:单调栈 void M_stack(){ a[n+1]=0; int p=0; for(int i=1;i<=n+1;i++){ if(a[i]>s[p]){ s[++p]=a[i],w[p]=1; }else{ int width=0; while(s[p]>a[i]){ width+=w[p];
阅读全文
摘要:判断四个点是否能够练成一个正方形 # include <bits/stdc++.h>using namespace std;int x[4],y[4];int length=0,cnt=0;int len[6];int check(int arr[],int num){ for(int i=0;i
阅读全文
摘要:计算几何 凸包 极点法 n4 通过在不在三角形内部来判断是否为极点,如果为极点那么就是构成凸包的点,如果是在三角形内部的,那就不是构成凸包的点 由于n4会炸,那么in_triangle_test可以分解为三个to_left_test,三个to_left_test如果都为true那么in_triang
阅读全文
摘要:凸包 二维凸包(Graham算法)nlogn # include <bits/stdc++.h>using namespace std;const int MAXN=1e4+10;int N;struct point{ double x,y;}p[MAXN],s[MAXN];double chec
阅读全文
摘要:1. 多边形的面积 //关于面积的正负是因为三角形的面积是用叉乘计算的,所以面积是有正负的,所以最后使用的时候一般是要取绝对值的abs()或者fabs() p//给三角形的三个坐标点,求三角形的面积LL area(LL x1,LL y1,LL x2,LL y2,LL x3,LL y3){ LL s=
阅读全文
摘要:Fansblog 由威尔逊定理可得(p-1)!% p = p-1,那么我们可以从中一直找,找到比p小的最大的质数,然后 Q ! % p = (p-1) * inv ( p-1 ) % p * inv ( p-2 )%p …… * inv ( Q+1 )%p; # include <bits/stdc
阅读全文
摘要:中位数 一、货舱选址 $$min(sum_{i=1}^n |A[i]-k|)$$ $$k=(n+n(mod)2)/2;$$ 注意在求k之前要sort整个数组 二、均分纸牌 $$sum_{i=1}^n |i*\frac{T}{M}-G[i]|==sum_{i=1}^n |S[i]|$$ $$G[i]=
阅读全文
摘要:位运算 1. lowbit( ) //1. hash 或者数组预处理# include <bits/stdc++.h>using namespace std;const int MAXN=1<<20;int H[MAXN+1];int lowbit(int n){ return n & -n;}
阅读全文
摘要://求全排列 next_permutation(begin,end)/*next_permutation(start,end),和prev_permutation(start,end)。这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列。至于这里的“前
阅读全文
摘要:离散化 离散化就是对应,把太分散的数字通过离散化对应到一个连续的数组上,然后以方便存储 void discreate(){ sort(a+1,a+n+1); for(int i=1;i<=n;i++){ if(i==1||a[i]!=a[i-1]) b[++m]=a[i]; } return ;}i
阅读全文
摘要:逆序对 求任意两个区间之间所形成的逆序对的个数 LL calc(Node x,Node y){ LL l=max(x.l,y.l); if(l>x.r) return 0; LL r=min(x.r,y.r); LL ans=(l-y.l+r-y.l)*(r-l+1)/2%mod; ans=(ans
阅读全文
摘要:ST表 # include <bits/stdc++.h>using namespace std;const int MAXN=1e5+100;int a[MAXN];int f[MAXN][20];int len[MAXN];int n,m;void ST_len(){ for(int i=1;
阅读全文
摘要:priority_queue #include <iostream>#include <queue>using namespace std;//方法1struct tmp1 //运算符重载<{ int x; tmp1(int a) {x = a;} bool operator<(const tmp
阅读全文
摘要:快读 inline LL read(){ LL X=0,w=0; char ch=0; while(!isdigit(ch)) {w|=ch=='-';ch=getchar();} while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); re
阅读全文
摘要:差分、前缀和和组合数 1、 所加的如果式组合数的话,可以通过多次前缀和求得,进而用差分解决区间加的问题。 # include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN=1e5+100;const L
阅读全文
摘要:数论分块 n/i 有2*sqrt(n)种情况 2.对于n/i 有分块区间 [ l , r ] , 其中 r = n / ( n / l ) for(int l=1,r;l<=n;l=r+1){ LL a=n/l;//当前区间中的数 r=n/(n/l);//区间的右端点 //do something}
阅读全文
摘要:lower_bound( )和upper_bound( ) 都是利用二分查找的方法在一个排好序的数组中进行查找的。 在从小到大的排序数组中, lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存
阅读全文
摘要:Minimal Power of Prime 哭死,以为是米勒拉宾和扑拉德诺,结果是一个思维题,对不起队友啊,优化五小时,优化不出来 其实就是先对一个数,把1e4以前的质数因子全部先找一遍,然后再对大于1e4的因子,再查询,最大的指数是4,所以只有可能是4,3,2,1次 # include <bit
阅读全文
摘要://中国剩余定理 # include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN=50;LL a[MAXN];LL b[MAXN];int k;LL mul(LL a,LL b,LL mod){ LL
阅读全文
摘要://求逆元//扩展gcd//1.65s# include <bits/stdc++.h>using namespace std;int exgcd(int a,int b,int &x,int &y){ if (b==0) { x=1,y=0;return a; } int d=exgcd(b,a%
阅读全文
摘要:# include <bits/stdc++.h>using namespace std;typedef long long LL;LL quick_pow(LL a,LL b,LL mod){ LL ret=1; while(b) { if(b&1) ret=ret*a%mod; a=a*a%mo
阅读全文
摘要:五大基础博弈论 Nim 博弈 【题意】有n堆石子,每堆ai个石头,每个人任意可以选取一堆,取走任意多个,可以把一堆取光,但是不能不取,取走最后一个的人获胜。 【题解】a1^a2^……^an==0 先手必输 # include <bits/stdc++.h>using namespace std;c
阅读全文
摘要://数学备忘录 //数学 //素数 //判定素数bool Is_prime(int n){ if(n==1) return false; if(n==2||n==3) return true; if(n%6!=1&&n%6!=5) return false; for(register int i=
阅读全文
摘要:A The Fool 签到题 数论分块 数学题 B The World 时间处理问题 字符串 C Justice 思维题 E The Tower 计算几何 几何题 I Strength 贪心+田忌赛马 博弈论 A The Fool 数论分块(队友写的,所以没有解析) # include <bits/
阅读全文
摘要:矩阵乘法 //矩阵乘法,斐波那契数列# include <bits/stdc++.h>using namespace std;typedef long long LL;const LL mod=1e9+7;inline void mul(LL f[2],LL a[2][2]){ LL c[2];
阅读全文
摘要:A Super-palindrome 找规律+回文子串 字符串 B Master of Phi 积性函数+欧拉函数 数学题 C Hakase and Nano 博弈论 D Master of Random 找规律+逆元 数学题 J Master of GCD 数论gcd A Super-palind
阅读全文
摘要:杜教筛 此处为莫比乌斯函数和欧拉函数的 # include <bits/stdc++.h>using namespace std;typedef long long LL;typedef unsigned long long ULL;const int MAXN=5e6;int v[MAXN+10
阅读全文
摘要://二次剩余 //一般是求 x^2=n(mod p) 的解的,其中一般是保证p为奇素数,但是这套板子还处理了2的情况,把素数的情况大部分都包含了# include <bits/stdc++.h>using namespace std;typedef long long LL;# define ran
阅读全文
摘要:# include <bits/stdc++.h>#define MAX_L 2005 //最大长度,可以修改using namespace std; class bign{public: int len, s[MAX_L];//数的长度,记录数组//构造函数 bign(); bign(const
阅读全文
摘要://Pollard_Rho && Miller_Rabin class类//跑的快的时候可以到1.01s #pragma GCC optimize("Ofast")#include<bits/stdc++.h>typedef long long LL;typedef long double LD;
阅读全文
摘要:N次剩余 //【题意】 给定newx,k,m,方程(x^k)%m=newx,求在模m意义下的所有解x//【限制】 0 <= newx,m,k <= 1.5*10^15; m是素数# include <bits/stdc++.h>using namespace std;# define LL __in
阅读全文
摘要:学长们又在vj上拉比赛了,菜鸡的我补一补学长们说的水题。QAQ 第十届山东省ACM省赛 A - Calandar 有点类似于2050的一道题,就是因为是以5为周期的,所以年数和月数都对于最后的结果没有影响,有可以想到定义的是一个月有30天,所以每个月的同一天的星期数是一样的,可以搞一个数组存下一个月
阅读全文
摘要:持续更新~~直到省赛 #8 The 14-th BIT Campus Programming Contest()GYM A - 两只脑斧 # include <bits/stdc++.h> using namespace std; int main() { int n; string a; char
阅读全文
摘要:BSGS //unordered_map<LL,LL>m;// 300ms# include <bits/stdc++.h>using namespace std;typedef long long LL;unordered_map<LL,LL>m;LL quick_pow(LL a,LL b,L
阅读全文
摘要:Lucas //求c(n,m)%p 其中p是质数 # include <bits/stdc++.h>using namespace std;typedef long long LL;LL mulit(LL a,LL b,LL mod){ LL res=0; while(b){ if(b&1) re
阅读全文
摘要:#include <bits/stdc++.h>using namespace std;inline __int128 read(){ __int128 x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=g
阅读全文
摘要:今天打完PTA了,还是太菜了。。。 把以前整理的关于PTA的心得发一下出来吧,希望以后有需要的朋友能够方便一点吧。 L1-035 情人节 字符串比较可以直接用等号,也可以用strcmp函数(==0为相同) 字符比较则也可以用等号 # include <bits/stdc++.h> using nam
阅读全文
摘要:最长上升子序列 NlogN hdu 1950 # include <bits/stdc++.h>using namespace std;const int MAXN=2e6+100;int a[MAXN],dp[MAXN];//vector<int> ans;int main(){ int T;
阅读全文
摘要:1001 hzy和zsl的生存挑战 **【题意】**zsl 和hzy 来到了臭臭城堡,打算挑战臭臭城堡的大魔王hyz,大魔王hyz设置了这样的一个挑战: zsl 和hzy两个人各自来到一间密室,期间两人无法以任何形式交流 大魔王hyz会随机在两个人的脑海里各发送一个数字,0或者是1 zsl 和 hz
阅读全文
摘要:子集生成 1.该数二进制的所有组合的集合 # include <bits/stdc++.h>using namespace std;int a[20],v[1<<16],dp[1<<16];int dfs(int s,int now){ if(dp[s]) return dp[s]; int an
阅读全文
摘要:字符集为2——过河卒变形 此模型多用于01串、括号串,这种字符集为2的字符串,最好它的个数再给定 1)把01串转化为图上的往右走或者往上走,个数为先限制的图的长宽 2)前缀和后缀可以转化为图上的权值 3)固定的字符可以转化为某个点固定下一步的方向 装化为过河卒问题 eg:牛63 D # includ
阅读全文
摘要:Codeforces Round #581 (Div. 2) d1,d2 【题意】:给一个二进制的子串,然后,问包含0最多的另一个子串是什么,其中这个子串要求任何一个区间的子序列的最长不下降子串要求和原来一样长 【题解】:其实就是一个结论题啦,要保证是一样的话,那么就是要再是适当的时候下降,那么就是
阅读全文
摘要:斜率优化 1.费用提前计算 O(N^2) # include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN=5e3+100;LL f[MAXN],sumt[MAXN],sumc[MAXN];int N,
阅读全文
摘要:状压DP //一维dp:糖果【蓝桥杯省赛】# include <bits/stdc++.h>using namespace std;const int MAXN=1<<21;int dp[MAXN],s[110];int main(){ memset(dp,-1,sizeof(dp)); int
阅读全文
摘要:倍增优化的DP # include <bits/stdc++.h>using namespace std;typedef long long LL;string s1,s2;int n1,n2;LL f[105][32];int main(){ while(cin>>s2>>n2>>s1>>n1)
阅读全文
摘要:单调队列优化的DP k递增,calc递减的单调队列 # include <bits/stdc++.h>using namespace std;struct rec{ int L,P,S; } a[110];int N,M,f[110][16010],q[16010];bool operator <
阅读全文
摘要:数据结构优化的DP # include <bits/stdc++.h>using namespace std;const int mod=1e9+7;const int MAXN=1e3+100;int T,N,M;int f[MAXN][MAXN],a[MAXN],c[MAXN],aa[MAXN
阅读全文
摘要:刷了一些博弈论的结论题就不记录了,把一些有价值的题记录一下吧。 hdu 1517 sg函数打表找规律 # include <bits/stdc++.h> using namespace std; const int MAXN=1e4+100; int sg[MAXN]; int main() { /
阅读全文
摘要:Codeforces Round #595 (Div. 3) B # include <bits/stdc++.h>using namespace std;const int MAXN=2e5+100;int a[MAXN],b[MAXN];int dp[MAXN][2];int main(){
阅读全文
摘要:Codeforces Round #601 (Div. 2) A # include <bits/stdc++.h>using namespace std;int main(){ int T; scanf("%d",&T); while(T--){ int a,b; scanf("%d%d",&a
阅读全文
摘要:Poj 3437 类似于多叉树转化为二叉树 【题意】把多叉树转化为二叉树,和原来相比高度变化了多少 【题解】原来的高度就是原来最多有连续的多少条边,二叉树的高度是按照原来的树的构思每一条路径最长的那一个 # include <bits/stdc++.h> using namespace std; i
阅读全文
摘要:Educational Codeforces Round 74 (Rated for Div. 2) A # include<bits/stdc++.h>using namespace std;typedef long long LL;int main(){ int t; scanf("%d",&
阅读全文
摘要:Codeforces Round #593 (Div. 2) A # include <bits/stdc++.h>using namespace std;int main(){ int t; scanf("%d",&t); while(t--){ int a,b,c; scanf("%d%d%d
阅读全文
摘要:Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2) A # include <bits/stdc++.h>using names
阅读全文
摘要:Codeforces Round #585 (Div. 2) A # include <bits/stdc++.h>using namespace std;int a[10],k[10];int main(){ scanf("%d%d",&a[1],&a[2]); scanf("%d%d",&k[
阅读全文
摘要:Codeforces Round #590 (Div. 3) A # include <bits/stdc++.h>using namespace std;int main(){ int q; scanf("%d",&q); while(q--){ int n; int sum=0; scanf(
阅读全文
摘要:Educational Codeforces Round 72 (Rated for Div. 2) A # include <bits/stdc++.h>using namespace std;typedef long long LL;int main(){ int T; scanf("%d",
阅读全文
摘要:## 2019年C++A组**E RSA解密**若d * e和(p-1) * (q-1)互质,那么说明d * e=1(mod (p-1) * (q-1) ),那么e为d的逆元,应为(p-1) * (q-1)不是指数,所以不能用费马小定理要用扩展欧几里得。求出e后,用公式X=C^e mod n就可以解
阅读全文
摘要:Codeforces Round #582 (Div. 3) A # include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN=200;LL x[MAXN]; int main(){ int n;
阅读全文
摘要:Codeforces Round #580 (Div. 2) A # include <bits/stdc++.h>using namespace std;const int MAXN=250;int a[MAXN],b[MAXN];int mm[MAXN];int main(){ int n,m
阅读全文
摘要:Codeforces Round #581 (Div. 2) A # include <bits/stdc++.h>using namespace std;int main(){ string s; cin>>s; int len=s.size(); int ans=0; int flag=0;
阅读全文
摘要:Educational Codeforces Round 71 (Rated for Div. 2) A # include <bits/stdc++.h>using namespace std;int main(){ int t; scanf("%d",&t); while(t--){ int
阅读全文
摘要:1、一维状压DP糖果【蓝桥杯省赛】```cpp//糖果【蓝桥杯省赛】# include <bits/stdc++.h>using namespace std;const int MAXN=1<<21;int dp[MAXN],s[110];int main(){ memset(dp,-1,sizeo
阅读全文
摘要:Codeforces Round #578 (Div. 2) A # include <bits/stdc++.h>using namespace std;int r[15];int main(){ int n; scanf("%d",&n); getchar(); char a; for(int
阅读全文
摘要:Educational Codeforces Round 70 (Rated for Div. 2) A # include <bits/stdc++.h>using namespace std;int main(){ int T; scanf("%d",&T); while(T--){ stri
阅读全文
摘要:Codeforces Round #579 (Div. 3) A # include <bits/stdc++.h>using namespace std;int p[300];int c[300];int b[300];int main(){ int q; scanf("%d",&q); whi
阅读全文
摘要:Codeforces Round #575 (Div. 3) A # include <bits/stdc++.h>using namespace std;typedef long long LL;LL fff(LL a,LL b,LL c){ LL ans1=max(a,b); LL ans2=
阅读全文
摘要:Codeforces Round #577 (Div. 2) A # include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN=1e3+100;string s;int a[MAXN];int b[
阅读全文
摘要:Codeforces Round #576 (Div. 2) A # include <bits/stdc++.h>using namespace std;const int MAXN=1e5+100;int a[MAXN];int b[MAXN];int main(){ int n,x,y; i
阅读全文
摘要:Codeforces Round #574 (Div. 2) A # include <bits/stdc++.h>using namespace std;const int MAXN=1e3+100;int a[MAXN];int main(){ int n,k; int sum=0; scan
阅读全文
摘要:Educational Codeforces Round 69 (Rated for Div. 2) A # include <bits/stdc++.h>using namespace std;const int MAXN=1e5+100;int a[MAXN];int cmp(int a,in
阅读全文
摘要:Codeforces Round #561 (Div. 2) A # include <bits/stdc++.h>using namespace std;int f[30];int main(){ int n; string name; scanf("%d",&n); for(int i=0;i
阅读全文
摘要:Codeforces Round #573 (Div. 2) A # include <bits/stdc++.h>using namespace std;int main(){ int x; scanf("%d",&x); int b=x%4; if(b==1){ printf("0 A");
阅读全文
摘要:Educational Codeforces Round 68 (Rated for Div. 2) A # include <bits/stdc++.h>using namespace std;typedef long long LL;int main(){ int T; scanf("%d",
阅读全文
摘要:Codeforces Round #560 (Div. 3) A # include <bits/stdc++.h>using namespace std; const int MAXN=2e5+100;int main(){ int n,y,x; string a; int sum=0; sca
阅读全文
摘要:Educational Codeforces Round 65 (Rated for Div. 2) A # include <bits/stdc++.h> using namespace std; int main() { int t; scanf("%d",&t); while(t--){ in
阅读全文