ACM
z26y25j10
这个作者很懒,什么都没留下…
展开
-
Segment Tree(线段树)
0.适用范围线段树是一种数据结构,用于进行区间快速修改及查询。1.先导知识二叉树(略)2.定义线段树的每个结点代表着一个区间,我们将这棵树以数组的方式存储。设一个下标为、代表区间的结点,二分该结点,则该结点的左孩子(假如有的话)下标为、代表区间;右孩子(假如有的话)下标为、代表区间3.建树首先按照定义建树void build(int l,int r,int id){ segTree[id].l=l; segTree[id].r=r; if(l=原创 2020-11-13 00:49:16 · 234 阅读 · 0 评论 -
Manacher‘s Algorithm(马拉车)
之前明明学会了的结果隔了一段时间就忘得七七八八了噫呜呜噫写篇blog记录一下方便以后回顾!代码:class Solution{public: string longestPalindrome(string s) { if(s=="") return ""; string ans=""; string ss=""; ss+='$';ss+='#'; for(int i=0;i<s.le.原创 2020-09-13 07:26:51 · 102 阅读 · 0 评论 -
Codeforces Round #604 (Div. 2)
A. Beautiful String题目链接:https://codeforces.com/contest/1265/problem/AHint:水题,除非原本的串中除了"??"以外还存在其它的相邻且相同的字符,否则一定有解,瞎搞#include<bits/stdc++.h>using namespace std;#define ll long long...原创 2019-12-06 19:35:02 · 98 阅读 · 0 评论 -
51nod做题记录
1024 数字0-9的数量题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1042Hint(方法1):solve(r)-solve(l-1)、分成首位,中间位,末位瞎搞就好Hint(方法2):数位dp/*2019/11/4方法1(懒得再开一个数组直接在solve函数里求完了ans[r]-ans[l-...原创 2019-11-11 21:57:43 · 228 阅读 · 0 评论 -
Codeforces Round #599 (Div. 2)
打得状态很差的一场。。A.题目链接:https://codeforces.com/contest/1243/problem/A题意(大概)input:k:测试样例数n:n块长方形平板:第i块平板的长从n块平板(第i(1<=i<=n)块长宽1)中选择任意块,使它们组成的正方形面积最大题解:(水题,按理说可以五分钟内切的那种,燃鹅当天我疯狂...原创 2019-11-11 01:09:21 · 117 阅读 · 0 评论 -
模板9:Kruskal求最小生成树
#include<bits/stdc++.h>using namespace std;#define ll long longint n,m;int u[50005];int v[50005];int w[50005];int r[50005];int p[50005];int cmp(const int x1,const int x2){ retu...原创 2019-07-30 00:19:36 · 73 阅读 · 0 评论 -
模板10:Floyd求两点间最短路
关键代码: for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { d[i][j]=100000; if(i==j) d[i][j]=0; } } ....... for(int k=0;k<n;k++)...原创 2019-07-30 01:29:02 · 111 阅读 · 0 评论 -
多校 HDU6614(贪心)
HDU6614Q:n个顶点标号从1到n,任取标号为x和y的两点(x!=y),两点之间连接的边权值为(x&y)。找字典序最小的最小生成树。A:对于偶数i:i&1==0,且1的字典序最小,直接连1,不产生权值对于奇数i:i&1=1首先我们找是否存在1<=一个数<=n,且这个数&i==0找i的二进制的最低0位在哪里,产生一个...原创 2019-07-31 22:44:42 · 136 阅读 · 0 评论 -
多校 HDU6623(数学,二分)
努力的抄了某板子,结果居然是一道暴力思维题Q:找一个数n(n≤ )的最小质因子次方数即对...找min()A:假如对于n存在≤4000,O(n)筛素数,O(logn)求出≤4000时的 min,把n中这样的筛掉(除掉),假如这个时候n已经为1了,说明后面已经没有质因子了,直接输出此时的 min注意:下方提到的n都是筛掉4000以内的素数以后的n。假如对于n存在≥4000,...原创 2019-07-31 23:06:11 · 131 阅读 · 0 评论 -
多校 HDU6601(主席树/线段树/RMQ)
Q:给N(1≤N≤1e5)个任意长度的三角形,长度为a1,a2,…aN(1≤ai≤1e9),Q(1≤Q≤1e5)组询问,每组询问给出l和r,在第l个到第r个的长度中选三个组成三角形使其周长最大,不存在输出-1A:首先这三个长度按大小排序时的标号显然必定是连续的:比方说设三个长度a>b>c, 如果a是这个区间中最大的数,b,c肯定是次大的数和次次大的数,因为这个时候...原创 2019-08-11 20:33:58 · 144 阅读 · 0 评论 -
线段树1
2019icpc网络赛南京站F题Greedy Sequence#include<bits/stdc++.h>using namespace std;#define ll long longconst int MAX=100010;const int MAXNODE=MAX<<2;int maxn[MAXNODE];void pushup(int ...原创 2019-09-03 19:00:15 · 103 阅读 · 0 评论 -
线段树2
HDU - 2795#include<bits/stdc++.h>using namespace std;#define ll long longconst int MAX=200010;const int MAXNODE=MAX<<2;int maxn[MAXNODE];int w;void build_tree(int i,int left...原创 2019-09-03 19:03:13 · 86 阅读 · 0 评论 -
模板8:sg函数打表
#include<bits/stdc++.h>using namespace std;#define ll long long/*BZOJ-1874Game 打表sg函数2019/2/13*/int f[15];int hm[15];bool hashh[10];int sg[1005];const int nn=1005;int main()...原创 2019-02-13 19:58:12 · 227 阅读 · 0 评论 -
模板7:并查集
struct Loc{ int x,y;}loc[55][55],pre[55][55];Loc Union_find(Loc root){ Loc son=pre[root.x][root.y];Loc t; while(root.x!=pre[root.x][root.y].x || root.y!=pre[root.x][root.y].y) ...原创 2018-11-29 21:40:42 · 165 阅读 · 0 评论 -
归并排序求逆序数
HDU - 6318交换和反转 输入:n:数组中元素个数x:按数组顺序交换数组中相邻两个元素所要花费的钱y:按任意顺序交换数组中相邻两个元素所要花费的钱n个元素:数组中元素输出:求使数组变为升序所需要的最少价格即求该数组的逆序数(按数组顺序/任意顺序交换次数均为该数组的逆序数次)归并排序求逆序数:归并排序采用分治策略ex:{1,8,3,5,2,4,6,9...原创 2018-07-26 22:11:22 · 197 阅读 · 0 评论 -
折半搜索
CodeForces-1006F Xor-Paths有n x m个网格,网格值为a(i,j),从(1,1)走到(n,m),每次只能向右走或者向下走,将经过的格子的值全部异或起来,求走到(n,m)时异或值为k的走法有多少种输入:n、m:n x m的网格k:要求得到的异或值n行,每行m个:网格a(i,j)的值输出:从(1,1)走到(n,m),最后异或值为k的走法有多少种直接从...原创 2018-08-08 15:44:14 · 468 阅读 · 0 评论 -
模板1:分解质因数
#include<bits/stdc++.h>using namespace std;#define ll long longint cnt=0;ll num[405];void primeFactor(ll n){ while(n % 2 == 0) { num[cnt++]=2; n /= 2; } ...原创 2018-08-24 20:15:55 · 610 阅读 · 0 评论 -
模板2:求单个数的欧拉函数( O(sqrt(n)) )
#include<bits/stdc++.h>using namespace std;#define ll long longll eular(ll n){ ll ans=n; for(int i=2;i*i<=n;i++) { if(n%i==0) { ans-=ans/i; ...原创 2018-09-04 20:25:56 · 291 阅读 · 0 评论 -
模板3:线性筛求欧拉函数及素数
int phi[MAXN];int prime[MAXN];bool check[MAXN];int tot;void get_phi(){ phi[1]=1; for(int i=2;i<=MAXN;i++) { if(!check[i]) { prime[++tot]=i; ...原创 2018-09-23 22:42:01 · 122 阅读 · 0 评论 -
模板4:快速幂(加取模)
int quick_pow(int x,int a,int mod){ int ans=1,base=x; while(a!=0) { if(a&1!=0) { ans*=base; ans%=mod; } base*=base; ba...原创 2018-09-24 23:00:20 · 141 阅读 · 0 评论 -
模板5:扩展KMP
char s2[10005]; char s1[1000005]; scanf("%s%s",s2,s1); int next[10005]; int i=0,k=-1,j=0; next[0]=-1,next[1]=0; int len1=strlen(s1); in...原创 2018-10-08 20:49:24 · 105 阅读 · 0 评论 -
Extended Euclidean algorithm(扩展欧几里得)
POJ - 1061 青蛙的约会#include<cstdio>#include<iostream>#include<algorithm>using namespace std;#define ll long longll exgcd(ll a,ll b,ll &x,ll &y){ if(b==0) { ...原创 2020-10-11 20:48:16 · 385 阅读 · 0 评论 -
模板6:__int128
void read(__int128 &x){ x=0; int f=1; char ch; if((ch=getchar())=='\n') x=x; else if(ch=='-') f=-f; else x=x*10+ch-'0'; while((ch=getchar())>='0' && ch<...原创 2018-10-29 21:55:43 · 433 阅读 · 0 评论 -
并查集判断无向图中是否存在回路
51nod 1416并查集判断图中是否存在回路:A连接B,AB的pre本来不相同,Union使它们pre相同;B连接C,BC的pre本来不相同,Union使它们的pre相同;C连接A,AC的pre本来就相同,说明成环。#include<bits/stdc++.h>using namespace std;#define ll long long...原创 2018-11-29 21:39:18 · 2292 阅读 · 0 评论 -
逻辑思维(1)
HDU - 6318 Maximum Multiple输入: n:x+y+z的和 x,y,z是三个整数,已知x+y+z为n,x,y,z都是n的因数,要使得xyz乘积最大,求最大乘积 输出:最大乘积,不存在则输出-1 ( x | n 居然是x是n的因子的意思……脑袋空空.jpg假设n / x = a,n / y = b,n / z = c,显然有1 / a + 1 / b...原创 2018-08-01 21:49:27 · 293 阅读 · 0 评论