摘要: http://acm.hdu.edu.cn/showproblem.php?pid=5726 求不修改区间gcd可以用线段树或者倍增。 求l-n的我们注意观察gcd(a​l​​,a​l+1​​,...,a​r​​),当l固定不动的时候,r=l...n时,我们可以容易的发现,随着r的増大,gcd(a​ 阅读全文
posted @ 2016-07-20 15:46 lbz007 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 给定一个由n个整点构成的凸多边形,求从n个点里任意选不少于3个点组成的所有凸多边形的面积之和,显然整点构成的多边形面积一定是0.5的整数倍,所以题目需要你算出答案的2倍 mod1000000007的值。 1.凸多边形里选出点组成的还是凸多边形。 2.三个点A,B,C构成的三角形,设从原点到他们的向量 阅读全文
posted @ 2016-07-18 20:51 lbz007 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 1 var 2 a,d:Array[-1..300000]of longint; 3 i,n,m,k,l:longint; 4 function erfen(x:longint):longint; 5 var mid,h,t:longint; 6 begin 7 h:=1;t:=l; 8 erfen:=0; 9 while h=d[l] then26 begin27 inc(l);28 d[l]:=a[i];29 end30 else31 begin32 k:=erfen(a[i]);... 阅读全文
posted @ 2013-11-06 07:33 lbz007 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有两个帮派,命令D a b表示a,b两人不在同一个帮派里,动态询问两个人是不是在同一个帮派。并查集。d[x]=0 or 1 表示x是否与根节点在同一帮派。碰到D a b 就合并,同时d[fa]:=(d[a]+d[b]+1) mod 2.路径压缩的时候维护一下就好了,方法如下。1 function find(x:longint):longint;2 var fa:longint;3 begin4 fa:=f[x];5 if f[x]=0 then exit(x);6 f[x]:=find(f[x]);7 d[x]:=(d[x]+d[fa])mod... 阅读全文
posted @ 2013-11-02 10:19 lbz007 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 哈希+挂链。可以用next数组挂链。 1 const p=99987; 2 type 3 arr=array[1..6]of longint; 4 var 5 a,b:Array[0..200000]of arr; 6 next:Array[0..200000]of longint; 7 i,j,n,has,tot:longint; 8 9 function hash(x:longint):longint;10 var i:longint;11 begin12 hash:=0;13 for i:=1 to 6 do14 hash:=(hash*7+a[... 阅读全文
posted @ 2013-10-11 21:26 lbz007 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 首先要知道一次打掉一个1*x*y的面是最优的。证明太简单所以略。然后看这道题的二维版本:bzoj1693[Usaco2007 Demo]Asteroids http://www.lydsy.com/JudgeOnline/problem.php?id=1693然后这样的题一般都是一维暴力来减少一维。就枚举最小的一维打掉哪些面。然后把剩下的压成两维,然后做。RunIDUserProblemResultMemoryTimeLanguageCode_LengthSubmit_Time410333lbz0071693Accepted12032kb4msPascal/Edit862 B2013-05-1 阅读全文
posted @ 2013-05-14 20:16 lbz007 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 对一个点(x,y)定义x'=x+y,y'=x-y,曼哈顿距离就可以写成max(|x1'-x2'|,|y1'-y2'|)。回到原题,容易发现,两个点(x1,y1)和(x2,y2)的距离为max(|x1-x2|,|y1-y2|)。把上面的处理倒过来,就可以回到我们熟悉的曼哈顿距离了。把点转换后枚举每个点,然后O(1)求出它到所有点的曼哈顿距离和。(排序后前缀和优化)。RunIDUserProblemResultMemoryTimeLanguageCode_LengthSubmit_Time410862lbz0073170Accepted5696kb6 阅读全文
posted @ 2013-05-14 17:08 lbz007 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 所有的白格向能攻击到的黑格连单向边,然后最大独立集就行了。细节看代码吧。RunIDUserProblemResultMemoryTimeLanguageCode_LengthSubmit_Time411274lbz0073175Accepted20068kb2212msPascal/Edit1637 B2013-05-13 17:19:41 1 const 2 x:array[1..8]of longint=(-1,-2,1,2,-1,-2,1,2); 3 y:array[1..8]of longint=(-2,-1,-2,-1,2,1,2,1); 4 var 5 n,i,j,k,... 阅读全文
posted @ 2013-05-14 17:03 lbz007 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 先求出最终的序列,然后树状数组求出每一个询问的答案。1.求最终序列可以用sbt。插入到位置x时如果比左子树的size大就插入到右子树中,否则就插入到左子树中。1 if x<=size[l[t]] then2 insert(x,l[t])3 else insert(x-size[l[t]]-1,r[t]);2.求每一个询问的答案。 f[i]为当前到这个数的最长上升子序列。查询这个数的最终位置之前的最大的f[j]为max,f[i]=max+1; ans[i]=max(f[i],ans[i-1]);for i:=1 to n do begin f[i]:=1+search(se[... 阅读全文
posted @ 2013-05-14 16:55 lbz007 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 想了一下午,最后还是请教altf4主席做出来的。(查题解的过程中拓扑序一样学了一大堆博弈论问题)每一个堆中的每个石子都是独立的,所以sg[i]表示第i堆有一个石子的sg值。所以这一堆的sg值= sg[i] xor 自己p[i]次。对于第i 堆,sg[i]=mex{sg[j] xor sg[k]} (j>i,k>=j)。 所以n^3求出sg数组。方案也可以用n^3的枚举解决(xor的逆运算是她自己)。RunIDUserProblemResultMemoryTimeLanguageCode_LengthSubmit_Time409659lbz0071188Accepted228kb40 阅读全文
posted @ 2013-05-10 22:20 lbz007 阅读(308) 评论(0) 推荐(0) 编辑
Live2D