摘要: 丧心病狂的数据结构题、、树链剖分之后用线段树套一个随便什么BST维护第K大值、、Code:#include <iostream>#include <cstdio>#include <algorithm>#include <set>#include <map>#include <queue>#include <vector>#include <cstring>#include <cmath>#include <cstdlib>#include <complex>us 阅读全文
posted @ 2013-06-18 22:50 JS_Shining 阅读(1188) 评论(0) 推荐(0) 编辑
摘要: 第一类询问:直接快速幂不会的右转百度第二类询问:求个逆元再判一下不会的右转百度第三类询问:首先有费马小定理、、所以答案不会超过p、、但是p的范围还是要T、、于是想到二分或者分块、、、二分的话感觉没什么前途、、于是分块、、(我不会打同余标记就用等于代替了、、)设最终答案x=k[sqrt(p)]+i那么有y^x=z(mod p)y^(k[sqrt(p)]+i)=z(mod p)y^i=z/(y^k[sqrt(p)]) (mod p)y^i=z*y^(k[sqrt(p)](p-2)) (mod p) (费马小定理)这里i的范围是0-[sqrt(p)]-1的、、k的范围是0..P/[sqrt(p)]的 阅读全文
posted @ 2013-06-12 16:11 JS_Shining 阅读(1132) 评论(0) 推荐(0) 编辑
摘要: 因为要去THUSC了做一下以前THUSC的题、、这个题是一个比较明显的概率DP、、可以把状态用当前是第几个珠子、到目前为止的最长长度范围、当前珠子颜色表示、具体点就是f[i][j][k]表示前i个珠子、最长长度不超过j、最后一个珠子的颜色是k的概率那么f[i][j][k]=sigma(f[i-1][j][*])*p[i][k]-sigma(f[i-j-1][j][*!=k])*P(i-j..i的颜色都为k)最后一个P可以在N^2的时间内预处理出来、、然后两个sigma的东西可以单独存出来加速、Code:#include <iostream>#include <cstdio&g 阅读全文
posted @ 2013-06-10 17:16 JS_Shining 阅读(310) 评论(1) 推荐(0) 编辑
摘要: 本题是一个动态树的模板题、link-cut-tree的论文可以百度文库中找、Code:#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#include <cstring>#include <vector>#include <set>#include <map>#include <queue> #define ps system("pau 阅读全文
posted @ 2013-05-23 21:57 JS_Shining 阅读(904) 评论(0) 推荐(0) 编辑
摘要: 【待填Code: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#include <cstring>#include <vector>#include <set>#include <map>#include <queue>#define ps system("pause")#define message printf(&qu 阅读全文
posted @ 2013-05-21 22:28 JS_Shining 阅读(958) 评论(0) 推荐(0) 编辑
摘要: 松鼠聚会:首先题目给出的松鼠之间的距离应该是max(|x1-x2|,|y1-y2|)、、然后我们知道、如果用x'=x+y,y'=x-y的方式重构所有点的坐标、两个点之间的距离就变成了max(|x1'-x2'|,|y1'-y2'|)、、于是我们用给的两个数字解一个一元二次方程得到原来的坐标、、然后前缀和乱搞搞统计曼哈顿距离和就好了、Code:#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#includ 阅读全文
posted @ 2013-05-21 17:50 JS_Shining 阅读(1285) 评论(0) 推荐(0) 编辑
摘要: 赛车:这个题就是水平可见直线、、水平可见直线怎么做呢、、就是把所有直线按斜率排序、然后从前往后处理边、当中维护一个栈、如果当前线和栈顶的交点在栈顶和栈顶-1的交点左边、那么弹掉栈顶、、(可以这么理解、、就是栈顶超越栈顶-1之前已经被当前线超越、、所以永无翻身之日了、、然后露出一个点也算的话会导致一些奇葩的情况、、特判处理一下就好了、、特别有一个就是交点横坐标如果<0要掐掉、、、Code:var np:boolean; v:array [0..10001] of boolean; k,b:array [0..10001] of longint; fr,s:array [0..10001]. 阅读全文
posted @ 2013-05-20 22:20 JS_Shining 阅读(1071) 评论(0) 推荐(1) 编辑
摘要: 题意很简单、、给定一个串求最长回文子串、、然后就是一个裸的好似叫manachure算法的东西、、用O(n)的复杂度求最长回文子串、、Code:var s:ansistring; a:array [0..2000100] of char; p:array [0..2000100] of longint; cur,en,ans,len,vv,n,i,id:longint;function min(a,b:longint):longint; begin if a<b then exit(a) else exit(b); end;begin readln(s); while s<... 阅读全文
posted @ 2013-05-20 11:02 JS_Shining 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 【Q:为什么要用这么长的标题A:为了骗访问……浏览器突然奇葩了……我就不贴代码说说思路了……采油区域:我们可以根据三个采油区域在横向和纵向上的重叠情况分成六种分布:(1)可以用两条横线分割(2)可以用两条纵线分割(3)可以分成左右两部分,其中左边可以分上下两部分(4)……………………………,其中右边可以分上下两部分(5)可以分成上下两部分,其中上面可以分成左右两部分(6)………………………………,其中下面可以分成左右两部分那然后经过一系列繁琐的预处理(其实DP就在预处理的时候写也是可以的)之后扫一扫就可以得到答案了、会议中心:如果不要求字典序最小的方案的话、显然直接贪心大家都懂的、然后要求字典 阅读全文
posted @ 2013-04-22 09:13 JS_Shining 阅读(1923) 评论(0) 推荐(0) 编辑
摘要: 这题目的意思大致就是本来有一棵所有边的权都是1的树、然后经过若干次操作把所有边的权值都变成0、中间会让你求根到一个点的权值和、本来想过树链剖分、后来看看数据范围和如此弱的操作又感觉不是、、然后分析一下、、这题就是快速求一个链上的数字和、、比如我们现在考虑根、就是相当于把根的所有子孙权值和剪掉这个儿子之外的所有儿子的子孙权值和、、也就是说、每个点的权值只在它和它的子孙上有效、、于是、、想到了DFS序、、每当访问到一个点、就在对应时间戳的位置+1、离开的时候在对应时间戳-1、抹杀的时候就把两个时间戳都刷成0就好了、、至于询问、、求个前缀和BIT大家都懂、、Code:#include <ios 阅读全文
posted @ 2013-02-21 22:52 JS_Shining 阅读(817) 评论(0) 推荐(0) 编辑