03 2013 档案
摘要:没什么好说的。。被坑了。。查询排名为k的数时,二分这个数,转化成查找w的排名。若w这个数不存在,就先插入w,然后把w旋转到根,既可以求w的排名。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define INF 100000000 8 #define N 1110000 9 #define BUG system("pause&qu
阅读全文
摘要:这玩意很神的样子,看了看论文真的很神啊~于是总结的一下XOR方程,顺便把高斯消元也总结了。发出来献丑了。我的[总结]高斯消元&XOR方程莫涛_高斯消元解XOR方程 (我胡乱写了几句注释,请不要在意。)
阅读全文
摘要:二分图匹配。如果i行j列是1,则i向j连边。如果这个二分图能够完全匹配了,则有解,反之无解。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define N 222 8 #define M 55555 9 10 using namespace std;11 12 int head[N],next[M],to[M];13 int cnt,n,l
阅读全文
摘要:这题zxr神犇当场ak了。。无限仰慕,用的是zxr神犇的方法,没有Riatre的~不加通道前时一棵树,然后根据这个再树上贪心就好了,反正我是没想到。。。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <algorithm> 6 7 #define N 111111 8 #define M 555555 9 10 using namespace std;11 12 int n,
阅读全文
摘要:这个题真是不爽,人家set又短又快,我这个又长又慢,差十几毫秒tle。。。我是一个splay维护相邻的最差小值,一个是维护全局最小差值(在插入的时候用前驱和后继更新)View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <algorithm> 5 #include <cstdlib> 6 #include <cmath> 7 8 #define N 2222222 9 #define INF 1LL<&l
阅读全文
摘要:理清思路,在草稿纸上写清楚需要哪些数据结构,分别维护什么,这样以后再写,思路还是很清晰的。就是好久不写数据结构,略微忘记了。。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define N 1111111 8 #define INF 1LL<<60 9 #define MOD 999997 10 11 using namesp
阅读全文
摘要:dp[i][j][k]表示从i到j合并,能否合并成字母k。。怎么暴力怎么来转移~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 #include <vector> 7 8 #define N 222 9 10 using namespace std;11 12 const char t[5]={' ','W
阅读全文
摘要:双向bfs。尼玛,比单向都慢。。。抑郁。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstdio> 6 7 #define N 77777 8 #define INF 0x3f3f3f3f 9 10 using namespace std;11 12 int n,st,ed;13 int map[5][5];14 int q[2][N];15 int sp[2]
阅读全文
摘要:爆搜啊~利用约数个数公式求答案。相当于找约数最多的数,个数相同取较小的。有一点需要注意:分解质因数,较小的数的指数一定大于等于较大的数的指数(显然的么~要么把大的数换成小的一定更优~)这样一来,可以确定质因数最多十个,剩下就是暴力了~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 7 using namespace std; 8 9 long lo
阅读全文
摘要:想到了一部分,没想全,还是看了题解。。也不知道为什么对。。。首先,求出所有点的4个边界值形成的一个矩形,第一个正方形的一个边界一定与这个矩形的4个角中的一个重合,枚举4次即可,然后再找到剩下的点中的边界,重复一遍上面的操作,最后判断一下一个正方形是否可以覆盖剩余的所有矩形View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstring> 6 7 #define N 222
阅读全文
摘要:按照关系建立又向边,缩点为DAG图,重新构图,判断是否有且仅有一个出度为0的点,如果是,这个点所代表的环上的点数就是答案。否侧,不存在~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define N 111111 8 #define M 555555 9 10 using namespace std;11 12 struct S13 {14
阅读全文
摘要:第一问:最长xx子序列第二问:f[i]表示前i个的最少花费,可以从满足条件j(假设以a[i]结尾的最长xx组序列长度为len,则j需要满足以a[j]结尾的最长xx组序列长度为len-1)方法:记录最长xx子序列的转移,邻接表存,然后枚举每个转移。ps:有个结论:如果从j转移到i的话,那么中间一定有一个k(k>=j&&k<i),使得j~k的高度都是a[j],k+1~i的高度都是i,且这样的花费是最优的,很容易想明白的~这个暴力显然tle,怎么可能会ac?数据弱,不解释View Code 1 #include <iostream> 2 #include &l
阅读全文
摘要:不知道什么印象,好像以前见过,记得要把数列倒过来的~nlogn的最长上升子序列。但是方案不好搞~PS:看好是谁的字典序最小。。。换个问题,假设知道以a[i]为开头的最长下降子序列的长度,是不是就好搞了?方法是从左往右,直接贪心的选这个i(以a[i]为开头的最长下降子序列的长度要大于你需要的长度)一定是能使字典序最小~前面说了,倒过来做就行了, 因为我们只会求以a[i]结尾的最长上升子序列的长度。。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #inclu
阅读全文
摘要:第一问,明显的二分答案+验证。第二问,dp[i][j]表示前j段切i刀的满足第一问的方案数,然后dp[i][j]=sigma(dp[i-1][k]) (k满足第一问限制)显然在循环j的时候是可以算出来这个值的,所以总复杂度是n*m的。其实我一开始写的是dp[i][j]表示前i个切j刀的方案数,显然这样写不能优化。。。然后写出方程,发现调换i、j就可以了~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #i
阅读全文
摘要:为按照极角,转化为线段覆盖问题。这题有个特别混蛋的trick,就是后掉落的把先掉落的完全覆盖了,我就没考虑这个,无限wa啊!!View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <algorithm> 5 #include <cstdlib> 6 #include <cmath> 7 #include <vector> 8 9 #define N 1111 10 #define PI 3.1415
阅读全文
摘要:这个题我总是想用循环完成转移,最后发现,还是手工枚举最靠谱~建立线段树,线段树的每个节点(代表的是区间)维护以上六个值,true表示连通,false表示不连通,具体可以看我的代码~View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define N 111111 8 9 using namespace std; 10 11 struct DAT
阅读全文
摘要:题解:现在写起旋转卡壳一气呵成~枚举凸包上每个点i,然后顺时针逐个扫描整个凸包上的点p1,在此同时维护两个指针p2,p3,分别表示在i和p1连线两侧的离这条线最远的点,发现p2,p3是单调的~总时间复杂度n^2的~View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cmath> 5 #include <iostream> 6 #include <algorithm> 7 8 #define N 2222 9
阅读全文
摘要:数据范围果断小,果断暴力。。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 14 9 #define INF 1e910 11 using namespace std;12 13 int a,b,n;14 double sm[N][N],map[N][N],dp[N][N]
阅读全文
摘要:题解:刚睡醒写的,总是看不清括号。。。调了半天。。就是横向一个掉队列,纵向b个单调队列,n^2的求出以(i,j)点为右下角的n*n矩形的最大值和最小值,然后n^2的统计就好~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 7 #define N 1111 8 #define BUG system("pause") 9 10 us
阅读全文
摘要:真是很好的计算几何题啊!~转化为二维问题,第三维可以由前两维确定,所以可以不用管。然后两种原料能配成的产品一定在两个点的线段上。转化成在m个点里找最少点,使其完全包含那n个点。floyd最小环。。PS:网上的貌似都是错了。。2 10 0 10 0.5 0.50 1 0答案:-1细节啊!!!View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <algorithm> 6 #inclu
阅读全文
摘要:题意:已知一个DNA串和一些病毒DNA序列,求出最少改变DNA串中多少个字符,能使得串中不包含任意一个病毒序列。题解:嗯,和上一个trie图一样,把病毒建成trie,只要母串不能再trie上走到危险节点即可(危险节点就是病毒dna序列的终止的那个被标有fg的节点)。然后trie图上的dp,要走到危险节点的时候,枚举转移即可。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algo
阅读全文
摘要:多么明显的半平面交。答案一定在山的顶点处或者半平面交区域的顶点处。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 7 #define N 555 8 #define EPS 1e-7 9 #define INF 1e12 10 11 using namespace std; 12 13 struct PO 14 { 15 double x,y;
阅读全文
摘要:题解:把原串直接接在后头,然后后缀数组本来就排序好了,正好用来求题目所需~毛线的,nlogn的就是烦,还是nlog^2n的好写,,View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstdio> 6 7 #define N 220000 8 9 using namespace std;10 11 char s[N];12 int rank[N],sa[N];13 int
阅读全文
摘要:貌似是论问题?、、感觉挺好玩了,写起来也简单。。http://files.cnblogs.com/proverbs/Trie%E5%9B%BE%E7%9A%84%E6%9E%84%E5%BB%BA_%E6%B4%BB%E7%94%A8%E4%B8%8E%E6%94%B9%E8%BF%9B.pdfView Code 1 #include <cstring> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <iostream> 5 #include <algorithm> 6 7 #
阅读全文
摘要:题解:一开始想二分答案,发现不会验证。。然后果断看到题解说每一刀切在哪里是可以算的。。按照两边的分配的块数。。暴力就好~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 7 #define INF 1e9 8 9 using namespace std;10 11 int n,m,gs;12 13 inline double dfs(double x
阅读全文
摘要:这题不能用普通的tarjan来缩点,因为看第一个样例普通tarjan会跪的很惨。。然后乱yy一个缩点就好了。桥边和环上的边分开处理,挺容易看懂的。。。神犇都说这题水,我这弱菜觉得一点都不水,,,View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define N 2222222 8 9 using namespace std;10 11 int
阅读全文
摘要:题解:最小生成树的两个性质:1、边权相等的边的个数一定。2、做完边权为w的所有边时,图的连通性相同。然后就暴力dfs吧~View Code 1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <cstdlib> 5 #include <cstring> 6 7 #define N 2000 8 #define M 30000 9 #define mod 31011 10 11 using namespace std; 12 13 str
阅读全文
摘要:题解:dp[i][j]表示长度为i,匹配了j个的方案数,压缩成矩阵,转移即可。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 7 #define SIZE 21 8 9 using namespace std; 10 11 struct MT 12 { 13 int x,y; 14 int mt[SIZE][SIZE]; 15 void prt()
阅读全文
摘要:题解:维护一个栈就好了,画画图就知道怎么维护了。。这两天总写不对计算几何的水题。。真是郁闷。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 7 #define N 555555 8 #define EPS 1e-7 9 10 using namespace std; 11 12 struct PO 13 { 14 double x,y; 15 v
阅读全文
摘要:题解:区间总的方案数是可以算的,只要求相同的颜色的方案数即可。(数学中讲的古典概型??)我不知道我写的是不是莫队算法,时间还是很快的。。话说,这题稍微优化的暴力也能过。看了别人的介绍莫队算法的文章没有看太懂,也不知道这个神奇的复杂度是怎么证明的。。。我大致是这样做的:1、分块2、把所有询问左端点排序3、对于左端点在同一块内的询问按右端点排序,然后分三种情况统计。传说中这样复杂度是nsqrt(n)的,但是我怎么觉得这个和我的暴力差不多。。。。莫名其妙跑的这么快。。。View Code 1 #include <iostream> 2 #include <cstring> 3
阅读全文
摘要:从这里看到的这个题。。很容易想到正解。http://blog.csdn.net/zxy_snow/article/details/6739561思路大概一样,就是不知道为什么我被卡精度了,,,acos精度本来就不好,然后题目还要求输出百分比+五位小数,直接把精度卡了。反正我写出来的当半径很大的时候误差会非常大,会达到3%左右。哎,查了一个下午,用几何画板模拟。真是恶心死了!我早知道卡精度就不做了。不知道“小媛”姐姐是怎么做的,实在不想看这个题了。感觉我的思维和代码都是挺清晰的。。尽管wa了,还是贴出来吧。。View Code 1 #include <cstdio> 2 #inclu
阅读全文
摘要:题解:投在地上的影子是很多圆和两圆公切线组成的梯形的面积并。PS:圆只要和地面平行,无论光从哪个角度照射,投影都是圆其实应该一开始应先分成若干份做simpson的。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 520 9 #define EPS 1e-610 11 usi
阅读全文

浙公网安备 33010602011771号