![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
模板
Ada Chambers
在ICPC的泥潭中苦苦挣扎。。。
展开
-
ICPC2018西南欧洲赛区F. Paris by Night(极角排序)
题目链接https://codeforces.com/gym/102465/problem/F题解思路很简单。枚举一个定点,完了一这个点为原点把其他点极角排序。然后按极角序枚举第二点形成分界边。这样直线一边包含的点是可以单调维护的。设置左右两个指针,分别是在当前分界向量(有第一点指向第二点)逆时针旋转180的点的起始和终止(像单调队列)。在边的一侧可以用向量叉积与0的关系来看。如果向量旋转角度是小于180的话,按右手定则叉积大于0。注意要弄两遍循环一下,因为可能转弯一圈回来了。可以当做极角排序的板子。原创 2020-10-05 23:10:28 · 433 阅读 · 0 评论 -
ICPC2019台北L-Largest Quadrilateral(求凸包+单调队列)
文章目录题目链接模板题意题解AC代码题目链接https://codeforces.com/gym/102460/attachments模板这个题可以学会O(nlogn)求外围凸包的模板。题意给一堆点,选出四个点使得按某种顺序连接这4个点的四边形面积最大。点数是4096,大概是n方的复杂度。题解首先这个最大的四边形应该是个凸四边形。只有当最大凸包上只有3个点时才可能是凹四边形。如果是图凸包只有3个点,那就随便乱搞了。凸包上的3个点必选,我是枚举剩下不在凸包上的点作为第四个点,完了看看哪种连接原创 2020-10-03 11:15:30 · 297 阅读 · 0 评论 -
洛谷P3975【天津省选2015】(后缀自动机DP)
题目链接https://www.luogu.com.cn/problem/P3975题解此题非常经典且重要,是sam的函谷关,必须拿下。记录每个点endpos大小的方法是在parent树从下往上递推。开始的is_pre就是看看当前点与没有包含原串前缀,有的话,这个会在parent tree分叉时候丢掉。也就是当前节点并不是所有子节点的endpos的并集,并集还得加上那个前缀的结束位置才是当前点的endpos集合。求endpos大小的dp非常经典。dp数组表示从某个点出发沿自动机往下走的子串有多原创 2020-08-15 10:01:52 · 250 阅读 · 0 评论 -
windows对拍批处理脚本
@echo off :loop data.exe > data.in xx.exe < data.in > std.out baoli.exe < data.in > my.out fc my.out std.out if not errorlevel 1 goto loop pausegoto loop原创 2020-08-07 19:47:09 · 443 阅读 · 0 评论 -
(对拍)随机生成一棵树
#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<cstdlib>#include<iostream>using namespace std;int fa[100015];int find(int x){ return x==fa[x]?x:fa[x]=find(fa[x]);}int main(){ srand(tim原创 2020-08-07 19:44:47 · 440 阅读 · 0 评论 -
芝加哥大学2016北美邀请赛Problem I:Tourists(树链剖分板题)
题面https://codeforces.ml/gym/101002题意给一棵树,统计每个点到点的编号时此点编号倍数的点的距离和。题解直接暴力把树解剖了。复杂度点i的倍数有n/i个。所以总的点对数是tot=∑i=1nn/i=n∑i=1n1itot=\sum_{i=1}^nn/i=n\sum_{i=1}^n\frac1itot=i=1∑nn/i=ni=1∑ni1这个明显是个调和级数。调和级数的发散公式:∑n=1k1n=lnk+γ+εk\sum_{n=1}^{k} \frac{1}原创 2020-05-25 21:47:23 · 142 阅读 · 0 评论 -
最小费用最大流dij板子
不说了,宏定义害死人#include<bits/stdc++.h>#define Pair pair<long long, long long>#define fi first#define se second/*宏定义害死人*///#define AddEdge(x,y,f,z) add_edge(x,y,f,z);add_edge(y,x,0,-z);// #define getchar() (p1==p2&&(p2=(p1=buf)+fread(b原创 2020-07-24 17:16:04 · 162 阅读 · 0 评论 -
dinic当前弧优化板子
洛谷的板题https://www.luogu.org/problemnew/show/P3376#include <cstdio>#include <cstring>#include <queue>#include <algorithm> using namespace std; const int MAX = (1ll << 31) - 1; long long read(){ long long x = 0; lon原创 2020-07-18 10:24:44 · 132 阅读 · 0 评论 -
最大流经典题--航线最优安排
题目描述 国庆大假期间旅游非常火爆,机票早已订购一空。成都一家旅行社由于信誉好、服务好,所策划的国庆首都游的行情看好,要求参加的游客众多,游客甚至不惜多花机票钱辗转取道它地也愿参加此游。旅行社只好紧急电传他在全国各地的办事处要求协助解决此问题。很快,各办事处将其已订购机票的情况传到了总社。根据此资料,总社要作出计划,最多能将多少游客从成都送往北京以及如何取道转机。下面是各办事处已订购机票的详细情况表: 成都 重庆 武汉 上海 西安原创 2020-06-26 19:02:07 · 899 阅读 · 0 评论 -
牛客2020多校round2
先更第二场。第一场题解看哭了,不太全。题目链接https://ac.nowcoder.com/acm/contest/5667#questionA.All with Pairs题意f(s1,s2)f(s1,s2)f(s1,s2)定义为一个最大的数i,s1...i=t∣t∣−i+1...∣t∣s_{1...i}=t_{|t|-i+1...|t|}s1...i=t∣t∣−i+1...∣t∣。就是s和t的最长公共前后缀长度。给n个字符串,完了求:∑i=1n∑j=1nf(si,sj)2( mod 99原创 2020-07-14 22:36:29 · 153 阅读 · 0 评论 -
FWT模板代码
opt是1表示正变换,-1表示逆变换。原理证明参考https://www.cnblogs.com/cjyyb/p/9065615.html实际这个板子也是从那里抄的。但是知道原理没啥用,过一段就忘了。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int N;const int NN=1001000;int a[NN],b[NN];void FWT_or(in原创 2020-07-15 23:16:34 · 177 阅读 · 0 评论 -
芝加哥大学2016北美邀请赛Problem E:K-Inversions(FFT板题)
题目链接https://codeforces.ml/gym/101002题意有个只有AB两种字符的串,求出每个k-inversion的个数。k-inversion是长度为k,收尾分别是B,A的子串。题解FFT板题。设{ai=1&bi=0,si=′A′bi=1&ai=0,si=′B′\left\{\begin{array}{lr} a_i=1\&b_i=0,s_i='A'\\b_i=1\&a_i=0,s_i='B'\end{array}\right.{原创 2020-05-25 21:31:04 · 186 阅读 · 0 评论 -
斐波那契效率问题和矩阵快速幂
斐波那契效率问题暴力递归记忆化搜索数组递推滚动递推矩阵快速幂求特征矩阵带出公式暴力递归int f(int n){ return (n<=2) ? 1 : f(n-1)+f(n-2);}这样画出递归树会发现同一个n值,f(n)被算了很多遍。比如f(5)的递归树:越底层重复算的次数越多,时间用这个树的节点个数来算,就是指数级别的可怕结果。记忆化搜索可以开个数组把算过的记下来,再算就直接用不用往下递归。int f(int n){ return F[n] ? F[n] : (F[n]=原创 2020-05-17 22:54:27 · 246 阅读 · 0 评论 -
失配转移next求法模板
如代码注释。#include<cstdio>#include<cstring>#include<map>using namespace std;int nx[1001000];const int modd=998244353;typedef unsigned long long ull;map<ull,int> ma;void getnx(unsigned int s1[],int n){ nx[1]=0; for(int原创 2020-07-14 22:38:19 · 121 阅读 · 0 评论 -
优先队列自定义比较函数
下面的代码实现从.v小到大的队列。是Codeforces Round #655 (Div. 2)D. Omkar and Circle的错误代码。#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int NN=2e5+10;struct ppp{ long long v; int l,r; int id;原创 2020-07-12 23:20:28 · 623 阅读 · 0 评论 -
欧拉筛筛出最小素因数
这个是个板子题。Educational Codeforces Round 89D. Two Divisors题目链接https://codeforc.es/contest/1366/problem/D题意找到a的两个因数,使得两个因数的和与原数a互素。一共2e5个a要弄。吐槽这道题一看就是个构造题。挺难的。我开始觉得自己找到了方法,后来被队长叉掉了。难就难在很难想到构造的方法。但是想到了就很简单了。场上不少人过掉了,但我不会。赛后群里讨论我的想法被发现是个假算法,其他人也都不太会。完了看看官方原创 2020-07-11 22:59:11 · 440 阅读 · 0 评论