摘要: 首先要知道一次打掉一个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) 编辑
Live2D