Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

12 2015 档案

摘要:显然当且仅当gcd时才对答案有贡献,化简得\[\begin{eqnarray*}ans&=&\sum_{i=1}^n\sum_{j=1}^i\mu(ij)[\gcd(i,j)=1]\\ &=&\sum_{i=1}^n\sum_{j=1}^i\mu(ij)\sum_{d|i,d... 阅读全文
posted @ 2015-12-21 16:01 Claris 阅读(982) 评论(0) 推荐(0) 编辑
摘要:求出所有交点后从左往右扫描线,用每段的中位线去截所有三角形,算出长度并后乘以该段长度即可,时间复杂度O(n^3\log n)。#include#include#includeusing namespace std;const int N=310;const double eps=1e-9,inf... 阅读全文
posted @ 2015-12-21 01:32 Claris 阅读(685) 评论(2) 推荐(0) 编辑
摘要:因为欧拉函数是非完全积性函数,所以可以考虑对每个数进行分解质因数,将每个质数的解乘起来即可。对于一个质数p,设它在各个数中分别出现了b_1,b_2,...b_n次,那么由生成函数和欧拉函数的性质得,它对答案的贡献为:\[(\prod_{i=1}^n\frac{p^{b_i+1}-1}{p-1... 阅读全文
posted @ 2015-12-20 01:25 Claris 阅读(389) 评论(0) 推荐(0) 编辑
摘要:把询问看成二维点,建立kd-tree,每个点维护一个计数器。从1到n依次加入每个数,每次加入一个数时,对于所有包含它的询问,计数器加一,对于其它询问,计数器置0。那么每个询问的答案就是计数器的历史最大值,可以通过打标记实现。时间复杂度O(n\sqrt{m})。#include#includeco... 阅读全文
posted @ 2015-12-15 18:32 Claris 阅读(1660) 评论(12) 推荐(2) 编辑
摘要:一个直观的想法是把每条边拆成两条有向边,同时每条有向边是新图中的一个点。对于两条边a->b与b->c,两点之间连有向边,费用为两条边费用的最大值。然后新建源点S与汇点T,由S向所有起点为1的边连边,T接受所有终点为n的边,那么答案就是S到T的最短路。这样子的边数为O(m^2),不能承受。考虑枚举... 阅读全文
posted @ 2015-12-15 00:07 Claris 阅读(1544) 评论(0) 推荐(1) 编辑
摘要:对操作建立线段树,每个节点维护一个有序的操作表,表示用[l,r]的操作在每段区间上的作用效果。对于一个线段树节点,合并左右儿子信息只在该区间刚刚被填满时进行,利用归并排序,时间复杂度为O(n\log n)。查询的时候在线段树上分裂成O(\log n)个点,在每个点的表里进行二分查找即可,... 阅读全文
posted @ 2015-12-11 02:29 Claris 阅读(518) 评论(0) 推荐(0) 编辑
摘要:\gcd(ab,k)=\gcd(\gcd(a,k)\times \gcd(b,k),k)f[i][j]表示前i行,与k\gcdj的方案数,h[i]表示当前行选一个或两个,乘积与k\gcdi的方案数,然后DP即可。时间复杂度O(N(M+K))。#i... 阅读全文
posted @ 2015-12-10 00:02 Claris 阅读(370) 评论(0) 推荐(0) 编辑
摘要:按时间一步一步模拟。每一次,首先将所有没有水但是可以被灌到水的管子标记为有水,然后求出有水的管子里水面高度的最小值。如果a号管有水且最小值为b,那么说明此时蜘蛛碰到了水。如果有管子溢出且最小值就是它,那么说明此时无论如何水面都不会再上涨,即无解。然后往所有高度等于最小值的管子里灌上一高度的水... 阅读全文
posted @ 2015-12-08 21:12 Claris 阅读(640) 评论(0) 推荐(0) 编辑
摘要:设f[i][j][k]为到达(i,j),用时为\frac{k}{5lcm}小时的最低耗油量,然后DP即可。#includeconst int N=12,M=210005;const double inf=1e15;int n,L,lcm,lim,i,j,k,p,x,y,a[N],b[N]... 阅读全文
posted @ 2015-12-08 16:19 Claris 阅读(628) 评论(0) 推荐(0) 编辑
摘要:平面图求域之后增加超级根,然后建图求最小树形图即可。#include#include#include#includeusing namespace std;typedef long long ll;const int N=3010,M=10010,inf=0x7fffffff;int n,m,q,c... 阅读全文
posted @ 2015-12-08 00:56 Claris 阅读(343) 评论(0) 推荐(0) 编辑
摘要:首先要将这个图连通,方法是通过扫描线+set求出每个连通块最高的点上方的第一条边,然后向交点连边。然后把边拆成两条双向边,每次找到一条没走过的边,找到极角排序后它的反向边的后继,直到回到这条边。根据叉积可以求出面积,如果面积非负,那么就说明找到了一个封闭区域。然后再进行一次扫描线,找到一个点上方最低... 阅读全文
posted @ 2015-12-07 12:13 Claris 阅读(783) 评论(0) 推荐(2) 编辑
摘要:首先不考虑翻转,对于两个等长的序列,如果任意两条相邻边的边长比以及夹角都相等,那么就匹配。为了避免实数运算,边长比可以上下平方,然后约分。夹角可以用叉积和点积的最简比值来表示,注意上下符号都要保留。然后将这些信息离散化,转化成数字串匹配问题,建出用Hash表存边的AC自动机后即可解决。对于翻转,可以... 阅读全文
posted @ 2015-12-04 14:03 Claris 阅读(617) 评论(0) 推荐(0) 编辑
摘要:第一问:对B串建立SAM,暴力枚举A的每个子串,在SAM上走,若失配则可行。第二问:设g[i][j]表示B串的第i个字符之后最早出现的字符j的位置,暴力枚举A的每个子串,按照g贪心地走,若失配则可行。第三问:对B串建立SAM,设f[i][j]表示考虑了A的前i个字符,当前在SAM上的状态为j的最小长... 阅读全文
posted @ 2015-12-02 01:44 Claris 阅读(648) 评论(0) 推荐(1) 编辑
摘要:首先用并查集将等号缩点,然后拓扑排序判断有没有环,有环则无解,否则通过增加超级源点0,可以得到一棵树。设f[x][y]表示x子树里有y种不同的数字的方案数,由底向上DP。对于当前点x,依次遍历它的所有儿子y,设以x为根的子树里之前已经有了s[x]个点,y子树里有$... 阅读全文
posted @ 2015-12-01 23:31 Claris 阅读(296) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示