收集一些关于OI/ACM的奇怪的东西……
一、代码:
1、求逆元(原理貌似就是拓展欧几里得,要求MOD是素数):
int inv(int a) { if(a == 1) return 1; return ((MOD - MOD / a) * inv(MOD % a)) % MOD; }
2、底层优化(正确性未验证):
int cmp(int a) {if (!a) return 0; return a < 0 ? -1 : 1;} int cmp(int a) {return (a >> 31) + (-a >> 31 & 1);} int abs(int x) {return x > 0 ? x : -x;} int abs(int x) {int y = x >> 31; return (x + y) ^ y;} x = (x == a ? b : a) x ^ = a ^ b //等于0返回0,大于0返回1,小于0返回-1 int sgn(double x) { if(fabs(x) < EPS) return 0; return x > 0 ? 1 : -1; } int sgn(double x) { return (x > EPS) - (x < -EPS); } int fastMax(int x, int y) {return (((y-x)>>(32-1))&(x^y))^y;} int fastMin(int x, int y) {return (((y-x)>>(32-1))&(x^y))^x;}
3、扩栈,这玩意儿在OJ上用能防爆?
#pragma comment(linker, "/STACK:1024000000,1024000000")
4、神速读入fread
struct Reader { static const int MSIZE = 65536; char buffer[MSIZE], c; int l = 0, r = 0; char readchar() { if(l == r) { l = 0; r = fread(buffer, 1, MSIZE, stdin); } return buffer[l++]; } int readint() { c = readchar(); while(!isdigit(c)) c = readchar(); int res = 0; while(isdigit(c)) res = res * 10 + c - '0', c = readchar(); return res; } } reader;
二、神牛blog
三、专题
动态规划系列:
字符串系列:
计算几何系列:
数学系列:
四、(伪)算法教学
字符串系列:
数学系列:
ZJU2004 Commedia dell'arte - 八数码问题有解的条件及其推广
组合计数系列:
数论系列:
数据结构系列:
Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)
动态规划系列:
图论系列:
JAVA:
其他:
五、OI/ACMer感谢贴/退役贴/经验贴/等等:
六、解题报告
GDCPC2015题解 by lby@SYSU_Spirit_Moon
GDCPC2016题解 by lby@SYSU | Asiimov
七、其他:
数据结构动态演示1:http://www.comp.nus.edu.sg/~stevenha/visualization/
数据结构动态演示2:http://www.cs.usfca.edu/~galles/visualization/Algorithms.html