=======数据结构=======
Lngxling
这个作者很懒,什么都没留下…
展开
-
数论模板
1. 辗转相除法(欧几里得除法)int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}或者c++直接用函数__gcd()2.扩展欧几里得int exgcd(int a,int b,int &x,int &y){ if(b==0) { x=1; y=0; return a; } int k=ex...原创 2018-04-15 21:51:48 · 307 阅读 · 0 评论 -
zoj - 2460 元素 —— 线性基
思路:要使得最后得到的魔力值最大,只需要根据矿石的魔力值从大到小使用几个数异或,不能和之前能异或出的数相同,恰好是线性基插入操作#include <iostream>#include <cstdio>#include <cmath>#include <vector>#include <map>#include <...原创 2018-10-10 09:00:50 · 196 阅读 · 0 评论 -
HDU - 3949 XOR —— 线性基
题意:询问给定的数列里第k大的异或和思路:线性基将所有数插入线性基之后,所有62个数有的是0,其他数最高位1的位置不相同用类似高斯消元的方法将线性基变为每个数只有最高位1,这样就可以方便的求出第k大的异或最大的异或值一定是这些里面所有数的异或(全部能为1的位置都是1),第二大的异或值一定是最大的去掉最后一个1,依此类推(其实结果就是k的二进制里的1的下标对应的数的异或)...原创 2018-10-10 09:27:03 · 238 阅读 · 0 评论 -
bzoj - 2115 Xor —— 线性基
题意:求图中从1点到n点的所有路径中边权值异或的最大值思路:首先要理解,路径可以任意异或环像图中,从1到n的黑色路径,可以由任意一条红色路径到一个环,走遍环之后,再通过红色路径回到黑色路径上,这时红色路径上的值被异或了两次为0,结果就相当于是黑色路径异或蓝色环环是没有大小限制的,甚至可以包括黑色路径,所以通过这种方法可以由任意一条从1到n的路径得到所有的路径剩下的问题一...原创 2018-10-10 09:51:24 · 256 阅读 · 0 评论