奇技淫巧
largecub233
这个作者很懒,什么都没留下…
展开
-
精度--洛谷 P1378 油滴扩展
https://www.luogu.org/problem/show?pid=1378 这道题一看很水,但是却尝试了很多次才AC 为什么呢,被卡精度了; 精度问题是一个蛋疼的问题,因为计算机内部有很多神奇的方法来计算精度,所以精度会有所变异; 所以我在学习生活中,遇到一些精度问题,我会贴在这里;判断0时,为了防止意外,改为判断1e-9;PI≈3.141592653589; PI=acos(原创 2017-02-11 20:27:44 · 407 阅读 · 0 评论 -
c++优先队列,小根堆
一直对priority不会,现在要记一下了priority_queue<int,vector<int>,greater<int> >q;这样的话,我们可以得到一个小根堆; 意思大概是<类型,<存储方式>,<比较函数> >; 但是这个小根堆只能支持int; 反正我不会啦;struct cs{ int x; bool operator < (const cs &rhs) const原创 2017-06-16 09:33:31 · 18905 阅读 · 2 评论 -
spfa的2种优化——洛谷P3003 [USACO10DEC]苹果交货Apple Delivery
https://daniu.luogu.org/problem/show?pid=3003 SLF:Small Label First 策略,设要加入的节点是j,队首元素为i,若dist(j) <= dist(i),则将j插入队首,否则插入队尾。 LLL:Large Label Last 策略,设队首元素为i,每次弹出时进行判断,队列中所有dist值的平均值为x,若dist(i)>x则将原创 2017-08-21 21:22:29 · 481 阅读 · 0 评论 -
找到一个点是在环上
如果要缩点直接太监有向图我们设一个数组v[i] 表示i点可以有谁灌水得到 那么对于每一个没有遍历到的点去灌一遍水 如果遇到x->y并且v[x]==v[y]那么v[x]就是一个在环上的点;无向图和有向图一样,但是我们要定方向; 那么如果走了这条边,直接把这条边的反向边删掉就好了;原创 2017-07-11 15:01:51 · 425 阅读 · 0 评论 -
dp——洛谷 P1523 旅行商简化版
https://www.luogu.org/problem/show?pid=1523 旅行商问题也建议大家取了解一下,有很多变题; 首先是一个dp 【1】题意:旅行商问题,不过要求只能单向走,就是有n个地方,要求从西往东,到最东面的地方,在从东往西返回,经过每个点一次,求最短路径 【2】分析:由于有了方向的限制,这题不再是NP难题,我们可以假设有两个人一起从西往东走,走过的点不能重复原创 2017-06-24 08:54:27 · 656 阅读 · 0 评论 -
random_shuffle
#include<bits/stdc++.h>#define Ll long longusing namespace std;int main(){ scanf("%d",&n); srand(time(0)); for(int i=1;i<=n;i++)a[i]=i; while(++sum<=1000) random_shuffle(原创 2017-06-06 15:28:18 · 1291 阅读 · 0 评论 -
汉诺塔——洛谷P1242 新汉诺塔
https://www.luogu.org/problem/show?pid=1242 本来就对这个汉诺塔不是很熟悉的啦; 做了这道题目,总算理解了啦; 其实就是一个大暴力的啦; 这题实际上不难。就是先把每一个圆盘的初始所在的塔和最终所在的塔记录下来,接着从大盘到小盘枚举开始递归,而递归过程的作用就是使第x个圆盘能移到第y个塔上,并移动。 依照题意,不能使第x个圆盘移动到第y个塔上的原创 2017-06-01 15:41:40 · 980 阅读 · 1 评论 -
双机流水作业调度——codevs3008 加工生产调度
http://codevs.cn/problem/3008/ 额; 额; 我直接复制题解把; 这种题目是有个名词的,叫双机流水作业调度。 当然,poj上有这种题目,poj 2751,Saving Endeavour 值得庆幸的消息是,根据资料,已经证明,当机器数(或称工序数)大于等于3时,流水作业调度问题是一个NP-hard问题, 也就是说,出出题也就出个两台机器的问题。原创 2017-06-01 14:31:50 · 1027 阅读 · 0 评论 -
对于取模用质数
做了一道水题,引起了我对取某的兴趣; 对于一元多次方程f(x) 我们要判断f(x)是否为0; 但是难; 然后发现f(x)=0的时候f(x)%y=0 (y是任意数) 所以万我们就来可以取5,6个y; 如果f(x)%y全部是0的,那么f(x)多半是0;- 问题来了,为什么y要选质数,这个只是个模域啊 如果f(x)其实不是0,那么f(0)一定是这几个质数的原创 2017-05-05 15:03:41 · 1622 阅读 · 1 评论 -
非递归快速幂快速乘
http://blog.csdn.net/zy691357966/article/details/39735701int quickpow(int m,int n,int k) { int b = 1; while (n > 0) { if (n & 1) b = (b*m)%k;翻译 2017-03-24 10:05:06 · 385 阅读 · 0 评论 -
乱搞-洛谷P3237 [HNOI2014]米特运输
我是先讲题目呢,还是先骂人呢? 算了,先将题目;https://www.luogu.org/problem/show?pid=3237 题目意思是遍地可找的,但是我们怎么去记录某个点值确定时根节点的只能? 我一开始想到一个dfs n次的算法,时间复杂度n^2,炸! 其实你画个图自己推一下,规律显而易见 sum指的是其儿子的数量; 当5号点=x确定,2好点是x*2,根节点是x*2*3原创 2017-02-17 19:32:05 · 484 阅读 · 1 评论 -
关于long long
c++的long long很坑爹的啊; 首先 -2^63~2^63-1 输出时printf要”%lld” 另外还有一些神奇的东西啊; 1.关于数字,在后面+LL就特指longlong的数字 在位运算是,比如a&1,如果a为longlong,1位int那就完了啊,因为int的长度不如longlong长啊,位运算会出先问题; 所以我们要a&1LL 2. for(int i=1;i<=n原创 2017-02-17 10:45:49 · 436 阅读 · 0 评论 -
二进制小技巧
凡有位运算的全加括号!!!!!二进制嘛,可以加速 a*2==a<<1 a/2==a>>1 2^b==1<int outit(int x,int y,int num){ if(T[num].vv)return T[num].vv; num=num<<1;int ans=0; if(x<=T[num ].yy)ans=ans|outit(x,y,num ); i原创 2017-02-14 20:39:13 · 466 阅读 · 0 评论 -
关于运算的优先级的
运算的优先级坑死过很多人,包括prayer 因为在不同的编译器里面优先级有所不同; 大体可以看到 http://blog.csdn.net/nicky_zs/article/details/4053146 所以会出现一些很6的错误 最经典的 (a^b)==(c^d) 这个是一定要加括号的 比较偏的 b[i]=b[i-1]+(w[i]>=W?1:0); 这个括号也要加 然后就原创 2017-11-08 21:44:27 · 581 阅读 · 0 评论