- 博客(166)
- 收藏
- 关注
原创 dijkstra优化的最小费用最大流
const int inf = 0x3f3f3f3f;int tol,head[4010];struct edge{ int to,next,cap,flow,cost;}es[8000010];void init(){ tol = 0; memset( head , -1 , sizeof(head) );}void addedge( int u , int v ,...
2019-07-30 16:33:52
599
原创 ICPC2018 青岛站 有关题目题解
热身赛D题题意:第一行给n个数,第二行给m个数,m<=n,从n个数中取m个数和第二行的m个数匹配,匹配花费abs(ai-bj),求最小匹配花费。思路:建立三个堆,A堆存放第一行的数,B堆存放第二行中未被匹配过的数,C堆存放第二行中被匹配过的数。将n+m个数进行混合排序,从前向后扫描数组。遇到第一行的数:1.若B堆非空,则与B堆中花费最小的进行匹配2.若B堆空的,则...
2018-11-05 15:28:56
1525
原创 ICPC2018 青岛站 赛后总结
10.2:起一大早打滴滴到东站坐动车到了青岛,青岛站离海真的好近,一下车就感觉空气里有一点咸咸的味道。发现第一天不能报道,于是去栈桥和八大关走了一波。在栈桥上看到一种快艇(还是游轮不太记得清了)体验项目,最便宜的800/位,最贵的4800/位。嗯,有钱真好。必须吐槽一下八大关的路,非常的不平,不是上坡就是下坡,走起来累到爆。里面老别墅好多,名人故居好多,还有特别好看的花石楼和公主楼,异域风情浓厚,...
2018-11-05 10:07:15
922
原创 线段规范相交与非规范相交
bool norm_Inter( Line l1 , Line l2 ){ double c1 = (l1.e-l1.s)^(l2.s-l1.s); double c2 = (l1.e-l1.s)^(l2.e-l1.s); double c3 = (l2.e-l2.s)^(l1.s-l2.s); double c4 = (l2.e-l2.s)^(l1.e-l2....
2018-11-01 14:12:21
903
原创 多边形旋转模板
const double eps = 1e-8;const double pi = acos(-1);int sgn( double x ){ if ( fabs(x)<eps ) return 0; if ( x<0 ) return -1; if ( x>0 ) return 1;}struct point{ double x...
2018-10-28 15:20:01
530
原创 10月21日 训练记录 GYM 101908
B题:题意:博弈,二维平面上n个点,每次可以下移,左移或对角线移动任意步,将任意点移到原点即胜利思路:SG函数,初始有在对角线上的点则先手必胜。有三个禁区x轴,y轴和对角线,一旦移动到这些地方对手就赢了。所以相应得(1,2)和(2,1)就成为必败点了,这两个点无论如何移动都会进入到禁区。任意点最终都会移到(1,2)和(2,1),所以以(1,2)和(2,1)为起点并躲避禁区SG博弈就出结果了...
2018-10-21 21:15:42
546
原创 10月20日 训练记录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Team
A题题意:求数位总和为s且是d的倍数的最小值,若无解输出-1思路:s<=5000,d<=500说明状态数<=s*d=5000*500,bfs搜索代码:#include<bits/stdc++.h>using namespace std;struct node{ int mod; int sum; string num;...
2018-10-21 13:05:02
309
原创 10月20日 训练记录 GYM 101889
训练题目集B题:题意:给一段字符串,它是由挨个添加字符生成,生成时当添加元音时会使得整个字符串翻转,给目标字符串求生成方案数思路:计算整个字符串的元音数并找到不翻转原串的首个元音所在位置,若元音数为奇数答案为首个元音向后到下个元音或结尾的长度,若元音数为偶数答案则为向前到上个元音或开头的长度代码:#include<bits/stdc++.h>using nam...
2018-10-21 12:42:53
319
原创 10月19日训练记录 CF GYM 101911
A题题意:喝n杯咖啡,但两杯咖啡的间隔时间要大于d,问最少需要几天才能喝上n杯咖啡思路:贪心喝咖啡,每一杯都选时间符合要求的,如果找不到时间符合要求的就加一天代码:数据结构减智力,可以用set简单维护。。。#include<bits/stdc++.h>using namespace std;#define lson rt<<1#define rso...
2018-10-19 19:25:11
894
原创 10月17日训练记录 CF GYM 101915
A题题意:求从X开始向后数多少数字可以使得这些数的数位和恰好为N,若无解输出-1思路:二分答案代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;int Max( int a , int b ){ return a>b?a:b; }LL ten[20];LL num( L...
2018-10-17 18:52:17
241
原创 ZOJ 4009
题目链接题意:维护一个数列,数列有两种操作:1.将区间[L,R]中的每个数都变成3次方,即a[i] --> a[i]*a[i]*a[i]2.询问区间[L,R]的和(取模99971)思路:打表可以发现所有数字在取模的情况下循环节的最小公倍数为48,故维护一个48倍内容的线段树。更新可以在对应区间节点处打上更新标记,向上维护时可以将其看出更新偏转,向下询问定义一个变量...
2018-10-02 11:37:29
290
原创 JAVA牛顿迭代法求大数开方
import java.io.*;import java.math.*;import java.util.*;public class Main { public static void main( String[] args ) throws Exception { Scanner cin = new Scanner(System.in); String nStr = ...
2018-09-28 16:39:15
409
原创 黑科技开根号
int my_sqrt( float x ){ if ( x==0 ) return 0; float result = x; float xhalf = 0.5f*result; int i = *(int*)&result; i = 0x5f375a86-(i>>1); result = *(float*)&...
2018-09-28 13:09:54
605
原创 COGS 2639 多维偏序 分块+bitset解决偏序问题
编程思路:以bitset的01表示来代替此维有多少符合偏序,最后取k维偏序的交集即是答案使用分块加速原理,可以根据此维数字大小排名来分块预处理每一小块,查询时使用二分得到快速定位属于的块号,最后再暴力计算剩余的<=sqrt(n)个数字模板代码:#include<bits/stdc++.h>using namespace std;typedef long lo...
2018-09-15 10:08:54
724
原创 cdq分治(cdq分治套cdq分治套cdq分治)
COGS 2580(cdq分治求五维偏序)第一维:排序第二维:分治后标号处理第三维:分治后标号处理第四维:分治第五维:树状数组模板代码:#include<map>#include<set>#include<ctime>#include<stack>#include<cmath>#include<...
2018-09-14 14:22:14
607
原创 莫队算法
简单版本:将区间分成sqrt(n)块并将询问按照左端点的所在块序号排序,左端点块序号一样则按照右端点排序LL Gcd( LL a , LL b ){ return b==0?a:Gcd( b , a%b ); }struct Query{ int L,R,id;}Q[maxm];struct Ans{ LL a,b; void reduce() {...
2018-09-12 20:14:19
225
原创 DLX重复覆盖
const int maxn = 15*15+10;const int maxm = 15*15+10;const int maxnode = maxn*maxm;const int inf = 0x3f3f3f3f;struct DLX{ int n,m,sizes,H[maxn],S[maxm],ansd; int U[maxnode],D[maxnode],L[...
2018-09-12 12:25:20
400
原创 DLX精确覆盖
DLX精确覆盖:对于给定的01矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1数独转换为DLX精确覆盖求解:每个格子都要填入数字---001到081列,表示数独中9*9=81个格子是否填入数字。如果是,则选取的行在该列上为1。每一行都要有1~9填入---082到162列,每9列就代表数独中的一行,如果该行有某个数字,则其对应的列上为1每一列都要有1~9填入---163到243...
2018-09-12 11:15:02
400
原创 分块
int block;//每块大小int num;//块数int l[maxn];//第i块的左边界int r[maxn];//第i块的右边界int belong[maxn];//第i个位置属于那块void Build(){ block = sqrt(n); num = n/block; if ( n%block ) num++; for ( int i=1 ; i&l...
2018-09-12 09:59:53
225
原创 计算几何知识补充
1.以格子点为顶点的线段,覆盖的点的个数为GCD(dx,dy)2.Pick公式:顶点坐标均是整点的简单多边形:面积=内部格点数目+边上格点数目/2-13.任意一个多边形的面积等于按顺序求相邻两个点与原点组成的向量的叉积之和三点求圆心坐标(三角形外心)//三点求圆心坐标(三角形外心)Point waixin( Point a , Point b , Point c ){ d...
2018-09-12 09:43:10
196
原创 旋转卡壳
一般套路:对散点跑一个凸包出来,然后在凸包上进行旋转卡壳。例如:(旋转卡壳求两凸包最小距离完整代码)#include<map>#include<set>#include<ctime>#include<stack>#include<cmath>#include<queue>#include<vecto...
2018-09-11 20:25:16
290
原创 凸包模板(Graham)
//凸包,Graham算法//点编号0~n-1//返回凸包结果Stack[0~Top-1]Point List[maxn],Stack[maxn]; int Top;bool cmp( Point a , Point b ){ double tmp = (a-List[0])^(b-List[0]); if ( tmp>0 ) return true; e...
2018-09-11 19:35:00
185
原创 平面最近点对
初始要先按x升序y升序排个序struct Point{ double x,y; Point(){} Point( double _x , double _y ) { x = _x; y = _y; } Point operator -( const Point&b )const { retur...
2018-09-11 18:24:26
267
原创 半平面交O(nlogn)版
int sgn( double x ){ if ( fabs(x)<eps ) return 0; if ( x<0 ) return -1; if ( x>0 ) return 1;}struct Point{ double x,y; Point(){} Point( double _x , double _y ) ...
2018-09-11 17:59:18
246
原创 线段移动(多边形内缩)
向左移动(对应逆时针)://求两点距离double dist( Point a , Point b ){ return sqrt( (a-b)*(a-b) );}//将线段ab往左移动距离rvoid change( Point a , Point b , Point &c , Point &d , double r ){ double dis = ...
2018-09-11 14:17:50
1656
原创 半平面交
//符号判断int sgn( double x ){ if ( fabs(x)<eps ) return 0; if ( x<0 ) return -1; if ( x>0 ) return 1;}//点类定义struct Point{ double x,y; Point(){} Point( double _x ,...
2018-09-11 12:50:46
149
原创 Pick公式相关
1.以整点为顶点的线段,覆盖的点的个数为GCD(dx,dy)2.Pick公式:顶点坐标均是整点的简单多边形:面积=内部格点数+边上格点数/2-13.任意一个多边形的面积等于按顺序求相邻两个点与原点组成的向量的叉积之和...
2018-09-10 21:13:05
432
原创 计算几何基本模板
const double eps = 1e-8;const double pi = acos(-1.0);//判浮点数符号int sgn( double x ){ if ( fabs(x)<eps ) return 0; if ( x<0 ) return -1; if ( x>0 ) return 1;}//Point定义struct ...
2018-09-10 14:35:32
188
原创 一般图最大权匹配(带花树)
#include<map>#include<set>#include<ctime>#include<stack>#include<cmath>#include<queue>#include<vector>#include<string>#include<c
2018-09-07 16:08:09
2656
1
原创 一般图匹配(带花树)
int tol,head[maxn];struct edge{ int u,v,next;}es[maxm];void addedge( int u , int v ){ es[tol].u = u; es[tol].v = v; es[tol].next = head[u]; head[u] = tol++;}int n,m,f[maxn]...
2018-09-06 21:29:30
483
原创 曼哈顿最小生成树
struct point{ int x,y,id; friend bool operator<( const point&a ,const point&b ) { if ( a.x!=b.x ) return a.x<b.x; else return a.y<b.y; }}p[maxn];in...
2018-09-06 13:35:41
278
原创 2-SAT(强连通缩点,拓扑排序求任意解)
int tol,head[maxn];int dol,dead[maxn];struct edge{ int to,next;}es[maxm],dag[maxm];void addedge( int u , int v ){ es[tol].to = v; es[tol].next = head[u]; head[u] = tol++;}void...
2018-09-06 12:28:10
511
原创 2-SAT(染色法,求字典序最小解)
int tol,head[maxn];struct edge{ int to,next;}es[maxm];void addedge( int u , int v ){ es[tol].to = v; es[tol].next = head[u]; head[u] = tol++;}bool vis[maxn]; int S[maxn],top;b...
2018-09-05 19:40:13
708
原创 zkw费用流
int tol,head[maxn];struct edge{ int to,next,cap,flow,cost;}es[maxm];void addedge( int u , int v , int cap , int cost ){ es[tol].to = v; es[tol].cap = cap; es[tol].cost = cost; ...
2018-09-05 17:46:41
470
原创 最大流模板
int tol,head[maxn];struct edge{ int to,next,cap,flow;}es[maxm];void addedge( int u , int v , int w ){ es[tol].to = v; es[tol].cap = w; es[tol].flow = 0; es[tol].next = head[u...
2018-09-05 14:32:47
170
原创 二分图多重匹配
int un,vn;int g[maxn][maxn];int linker[maxn][maxn];bool used[maxn];int num[maxn];//右边最大匹配数bool dfs( int u ){ for ( int v=0 ; v<vn ; v++ ) if ( g[u][v]&&!used[v] ) ...
2018-09-05 13:29:36
265
原创 二分图最大权匹配
int un,vn;//un左边点数,vn右边点数int g[maxn][maxn];int linker[maxn],lu[maxn],lv[maxn];int slack[maxn];bool visu[maxn],visv[maxn];bool dfs( int u ){ visu[u] = true; for ( int v=0 ; v<vn ; v++...
2018-09-05 12:54:00
134
原创 生成树计数模板(求行列式)
Matrix-Tree定理(Kirchhoff矩阵-树定理)G的度数矩阵D[G]是一个n*n的矩阵,并且满足:当i≠j时,D[i][j]=0;当i=j时,D[i][j]等于vi的度数 G的邻接矩阵A[G]是一个n*n的矩阵,并且满足:如果vi,vj之间有边直接相连,则A[i][j]=1,否则为0 G的Kirchhoff矩阵C[G]为C[G]=D[G]-A[G],则Matrix-Tree定理...
2018-09-04 21:43:42
316
原创 二分匹配(Hopcroft-Carp算法)
int tol,head[maxn];struct edge{ int to,next;}es[maxm];void addedge( int u , int v ){ es[tol].to = v; es[tol].next = head[u]; head[u] = tol++;}int un,dis;int mx[maxn],my[maxn];...
2018-09-04 19:08:46
278
原创 二分匹配(匈牙利算法)
int tol,head[maxn];struct edge{ int to,next;}es[maxm];void addedge( int u , int v ){ es[tol].to = v; es[tol].next = head[u]; head[u] = tol++;}int linker[maxn],un; bool used[max...
2018-09-04 15:13:13
128
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人