摘要:
UVA 11665 随便给12的找了一道我没做过的几何基础题。这题挺简单的,不过uva上通过率挺低,通过人数也不多。 题意是要求给出的若干多边形组成多少个联通块。做的时候要注意这题是不能用double浮点类型的,然后判多边形交只需要两个条件,存在边规范相交,或者存在一个多边形上的顶点在另一个多边形上或者在多边形内。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const double EPS = 1e-10; 9 const int N = 44; ... 阅读全文
摘要:
UVA 11859 看书看到博弈的部分了,然后就做一下这题。我们可以把因数个数看成石子,于是这题就变成了一个常规的Nim游戏了。 博弈好像挺好玩的,Bouton定理的证明也基本看懂,有空切一下博弈玩玩好像听不错的样子。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int N = 11111; 9 int pcnt[N];10 11 void PRE() {12 for (int i = 2; i < N; i++) {13 if (... 阅读全文
摘要:
UVA 11916 BSGS的一道简单题,不过中间卡了一下没有及时取模,其他这里的100000007是素数,所以不用加上拓展就能做了。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using namespace std; 10 11 template T gcd(T a, T b) { return b ? a : gcd(b, a % b);} 12 typedef long long LL; 13 void gcd(LL a,... 阅读全文
摘要:
UVA 11754 一道中国剩余定理加上搜索的题目。分两种情况来考虑,当组合总数比较大的时候,就选择枚举的方式,组合总数的时候比较小时就选择搜索然后用中国剩余定理求出得数。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 typedef long long LL; 11 12 const int N = 11; 13 const int UB = 11111; 14 int X[N], C, S; 15 ... 阅读全文
摘要:
Problem - 4347 一道KNN的题。直接用kd树加上一个暴力更新就撸过去了。写的时候有一个错误就是搜索一边子树的时候返回有当前层数会被改变了,然后就直接判断搜索另一边子树,搞到wa了半天。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int K = 6;10 const int N = 55555;11 int dm, cdm;12 template T sqr(T x) { return x * x;}13 struct ... 阅读全文
摘要:
HDU 4632~4642 先贴一下通过的代码,总结迟点再说~4637Rain on your Fat brother(我唯一出的一题,明明很水,可是就是好少人过- -) 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const double EPS = 1e-8; 10 const double PI = acos(-1.0); 11 inline int sgn(double x) { return (x > EPS) - (x T ... 阅读全文
摘要:
参考博客:Manacher算法--O(n)回文子串算法 - xuanflyer - 博客频道 - CSDN.NET 从队友那里听来的一个算法,O(N)求得每个中心延伸的回文长度。这个算法好像比较偏门,不过还是稍微掌握一下会比较好。 其实,我的理解就是,记录当前知道找到的最长的回文串的中心以及向右延伸后的最右端点位置。然后其中找最长回文串的操作其实还是暴力的,只不过这样记录两个位置以及覆盖了区间以后,下次我们要找的最长回文串的时候就可以借助这个已知信息减少大量的冗余查找。至于怎么证明这个剪枝可以使算法达到O(N)的复杂度,还是找资料比较好。用hdu 3068这题测试,340ms通过: 1 #.. 阅读全文
摘要:
辛普森积分法 - 维基百科,自由的百科全书Simpson's rule - Wikipedia, the free encyclopedia 利用这个公式,用二分的方法来计算积分。1071 ( The area ) 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const double EPS = 1e-8;10 double A, B, C, P, Q;11 12 template T sqr(T x) { return x * x;}13 inline ... 阅读全文
摘要:
HDU 4621~4631 今天的多校好变态,是IOI冠军出的题,把我们虐的半死了。 简单讲一下今天的情况,今天就只做了两道水题,算是签了个到,然后就卡1011(HDU 4631)一个下午了。其实感觉今天1009的几何是可以做的,因为我之前也做过类似的题,不过最后还是因为没信心做,所以放弃了。目测是可以用PSLG来做1009的,不过当时计算了一下最坏复杂度,觉得会超时,一直没做。 1011啱看上去是kd树,不过当时搞了好久都还是超时。开始的时候我直接上标准kd树,不带平衡功能的,各种超时。然后我就改成预处理整棵树,然后就用标记法来搞点的插入,理论上平均能达到O(log n)每次操作的,因... 阅读全文
摘要:
Problem - 3934 晚上为了演示给师弟看水平序的凸包是多么的好写,于是就随便找了一题凸包,25min居然1y掉了。。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 1111111;10 const double EPS = 1e-8;11 inline int sgn(double x) { return (x > EPS) - (x 1 && sgn(cross(pt[i] - ch[m - 2], c 阅读全文