02 2020 档案

摘要:主席树,大家这么叫的,也不知道为什么? 算法思路: 1.先排序,离散化 2.按排名插入n个版本的线段树 3.没有修改,查询即可 由于维护的是权值的区间和, 因此只要查询版本r和l-1,做差比较即可 1 #include <cstdio> 2 #include <algorithm> 3 using 阅读全文
posted @ 2020-02-29 22:22 墨鳌 阅读(198) 评论(0) 推荐(0)
摘要:1 #include <queue> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 int vis[305][305]; 6 int trun[8][2]={{1,2},{2,1},{1,-2},{-2,1},{- 阅读全文
posted @ 2020-02-29 15:02 墨鳌 阅读(212) 评论(0) 推荐(0)
摘要:1 #include <cstdio> 2 #include <string> 3 #include <cstring> 4 #include <iostream> 5 using namespace std; 6 typedef long long ll; 7 ll num,k=10,ans;in 阅读全文
posted @ 2020-02-28 16:26 墨鳌 阅读(313) 评论(0) 推荐(0)
摘要:忘了改矩阵的大小居然还有33分,我醉了 1 #include <cstdio> 2 const int N=35; 3 struct Matrix{int a[N][N];}; 4 int n,m; 5 Matrix A,O,I; 6 Matrix Mul(Matrix A,Matrix B){ 7 阅读全文
posted @ 2020-02-27 22:16 墨鳌 阅读(391) 评论(0) 推荐(0)
摘要:Fibonacci数列,快速幂 1 #include <cstdio> 2 struct Matrix{int a[5][5];}; 3 const int N=2,MOD=10007; 4 Matrix A,B,O,I; 5 Matrix Mul(Matrix A,Matrix B){ 6 Mat 阅读全文
posted @ 2020-02-27 21:53 墨鳌 阅读(276) 评论(0) 推荐(0)
摘要:我不理解为什么写dijkska就WA呢? atoi()是个好东西,给你个颜色,自己体会 疑惑!疑惑!疑惑! 1 #include <queue> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 const int 阅读全文
posted @ 2020-02-26 22:18 墨鳌 阅读(136) 评论(0) 推荐(0)
摘要:1 #include <cstdio> 2 struct Matrix{int a[5][5];}; 3 const int N=2,MOD=1e4; 4 Matrix A,B,O,I; 5 Matrix Mul(Matrix A,Matrix B){ 6 Matrix C=O; 7 for(int 阅读全文
posted @ 2020-02-25 20:08 墨鳌 阅读(122) 评论(0) 推荐(0)
摘要:已知矩阵乘法是n^3的,必然超时 故可以在需要验证的等式AB=C两边同时左乘D 一个1xN的任意的不含0矩阵 设E=DA,F=EB,G=DC,则此时只需验证F=G 当匹配到非法列J时,跳出n^2寻找行I即可 记录一下Ans,C[I,J]的正确值,然后就愉快地AC了 为了偷懒,我使用的矩阵是A~G连续 阅读全文
posted @ 2020-02-25 13:07 墨鳌 阅读(234) 评论(0) 推荐(0)
摘要:构造矩阵 1 #include <cstdio> 2 const int MAXN=100; 3 struct Matrix{int a[MAXN][MAXN];}O,I;int N; 4 void OI(int n){N=n;for(int i=0;i<MAXN;i++)for(int j=0;j 阅读全文
posted @ 2020-02-25 10:57 墨鳌 阅读(219) 评论(0) 推荐(0)
摘要:矩阵快速幂,主要是考构造。另外,swap总是写龊? 为什么?干脆放弃了。唉,我太难了。 思路:操作e和s都很好想,主要是g操作 我们可以额外空出一位,记为1,每次要加1,就对这个额外的1进行计算即可 不妨定义A=[1 0 0 ... 0],此时只要构造一组操作的等效矩阵T就好了 就是添一位使初始矩阵 阅读全文
posted @ 2020-02-25 01:14 墨鳌 阅读(185) 评论(0) 推荐(0)
摘要:1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef double db; 4 const db eps=1e-9; 5 db a,b,c,x,y; 6 db dis2(db X){ 7 db Y=a*X*X+b*X+c; 8 ret 阅读全文
posted @ 2020-02-24 16:57 墨鳌 阅读(333) 评论(0) 推荐(0)
摘要:将军饮马问题的升级版 二维平面中要从A到D,给出两条线段AB,CD,分别在线段AB,CD,以及空白处的速度为P,Q,R 求最少用时 由于最优位置满足“凸性”,且两条线段可以等价,所以可以采取三分答案迭代的写法 值得注意的一点:求两点距离时开方运算会损失一部分精度,一种玄学的方法是在开方前用一个eps 阅读全文
posted @ 2020-02-24 16:27 墨鳌 阅读(249) 评论(0) 推荐(0)
摘要:真的打起比赛来,连个贪心都写不好,呜呜呜。 1 #include <bits/stdc++.h> 2 using namespace std; 3 int a[5],t,ans; 4 void IF(int&a){if(a)ans++,a--;} 5 void IF(int&a,int&b){if( 阅读全文
posted @ 2020-02-24 11:24 墨鳌 阅读(234) 评论(0) 推荐(0)
摘要:1 #include <cstdio> 2 typedef long long ll; 3 int quick_pow(ll a,ll b,ll mod){ 4 ll ans=1; 5 for(;b;a=(a*a)%mod,b>>=1)if(b&1)ans=(ans*a)%mod; 6 return 阅读全文
posted @ 2020-02-23 15:30 墨鳌 阅读(172) 评论(0) 推荐(0)
摘要:1 #include <cstdio> 2 const int M=150010,N=30010; 3 struct edge{int v,w,next;}e[M];int head[N],cnt; 4 void add(int u,int v,int w){e[++cnt].v=v,e[cnt]. 阅读全文
posted @ 2020-02-23 15:15 墨鳌 阅读(150) 评论(0) 推荐(0)
摘要:枚举子集,要求子集的min+max<=k,求子集个数,答案对1000000007取模 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=100010,MOD=1000000007; 4 typedef long lo 阅读全文
posted @ 2020-02-23 00:32 墨鳌 阅读(183) 评论(0) 推荐(0)
摘要:分析:https://www.bilibili.com/read/cv4777102 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 const int MAXN=1e5+10; 5 struct node{in 阅读全文
posted @ 2020-02-22 20:38 墨鳌 阅读(289) 评论(0) 推荐(0)
摘要:题意就是,找出最长合法子括号序列 容易想到设f[l][r]为l~r的最长合法子括号序列的长度 然后从短的状态往长的状态枚举,不断更新答案就可以了 1 //#include<bits/stdc++.h> 2 #include <cstdio> 3 #include <cstring> 4 #inclu 阅读全文
posted @ 2020-02-21 21:49 墨鳌 阅读(161) 评论(0) 推荐(0)
摘要:每次只能从取集合S中个数的物品,其他和普通Nim游戏相同 预处理出每种物品堆的sg值,然后直接xor一下,xor-sum>0即必胜 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include < 阅读全文
posted @ 2020-02-20 22:12 墨鳌 阅读(181) 评论(0) 推荐(0)
摘要:题目把Nim游戏为什么可以取异或和讲解得十分清楚,建议多读几次,理解一下 再一个,可以把每次异或视为一次取数,因此(k[i]^sg)<k[i]即为一种可行操作 /* Nim is a 2-player game featuring several piles of stones. Players a 阅读全文
posted @ 2020-02-20 12:21 墨鳌 阅读(156) 评论(0) 推荐(0)
摘要:1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstri 阅读全文
posted @ 2020-02-19 23:00 墨鳌 阅读(175) 评论(0) 推荐(0)
摘要:1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstri 阅读全文
posted @ 2020-02-19 21:50 墨鳌 阅读(196) 评论(0) 推荐(0)
摘要://(ak,bk)=([k*(1+sqrt(5))/2],[k*(1+sqrt(5))/2]+k)=(ak,ak+k) 1 #include <cstdio> 2 double sqrt5=2.2360679774997896964091736687313; 3 int main(){ 4 for( 阅读全文
posted @ 2020-02-19 15:03 墨鳌 阅读(339) 评论(0) 推荐(0)
摘要:1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstri 阅读全文
posted @ 2020-02-19 13:33 墨鳌 阅读(123) 评论(0) 推荐(0)
摘要:假装自己打比赛嘿嘿嘿 1 #include <bits/stdc++.h> 2 using namespace std; 3 int t,n,d,a[100010]; 4 int main(){ 5 for(cin>>t;t--;){ 6 cin>>n>>d; 7 for(int i=1;i<=n; 阅读全文
posted @ 2020-02-18 20:43 墨鳌 阅读(236) 评论(0) 推荐(0)
摘要:POJ 2234 Matches Game HOJ 4388 Stone Game II POJ 2975 Nim HOJ 1367 A Stone Game POJ 2505 A multiplication game ZJU 3057 beans game POJ 1067 取石子游戏 POJ 阅读全文
posted @ 2020-02-18 13:54 墨鳌 阅读(116) 评论(0) 推荐(0)
摘要:开O2,开O2,开O2 重要的事情说三遍 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include <cstdio> 7 #include <cstdl 阅读全文
posted @ 2020-02-17 19:37 墨鳌 阅读(147) 评论(0) 推荐(0)
摘要:直径定义:树上的最长路径,不妨设端点分别为s,t 可以证明(感觉):每个点到其最远点必定为s or t,反之亦然 首先,第一次dfs找到s 然后,第二次dfs以s为根找到t 最后,第三次dfs以t为根 比较二三两次的当前点深度可得到答案 1 #include <set> 2 #include <ma 阅读全文
posted @ 2020-02-16 22:18 墨鳌 阅读(387) 评论(0) 推荐(0)
摘要:1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstri 阅读全文
posted @ 2020-02-15 15:58 墨鳌 阅读(162) 评论(0) 推荐(0)
摘要:int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);} #include <set> #include <map> #include <cmath> #include <queue> #include <vector> #include <cstd 阅读全文
posted @ 2020-02-14 23:30 墨鳌 阅读(135) 评论(0) 推荐(0)
摘要:https://github.com/twilightgod/twilight-poj-solution 阅读全文
posted @ 2020-02-13 20:40 墨鳌 阅读(122) 评论(0) 推荐(0)
摘要:错误AC解法,sort+set判重,为考虑异构! 比较坑的一点是读入时scanf一定要一次读6个数,不然会TLE #include <set> #include <map> #include <cmath> #include <queue> #include <vector> #include <c 阅读全文
posted @ 2020-02-13 18:20 墨鳌 阅读(143) 评论(0) 推荐(0)
摘要:不是很懂? 胡乱hash 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include <cstdio> 7 #include <cstdlib> 8 #i 阅读全文
posted @ 2020-02-12 20:53 墨鳌 阅读(148) 评论(0) 推荐(0)
摘要:哈个希加挂个链表 一个要背的字符串hash函数ELFhash() mod数取数据最大容量的1.5倍最佳?! 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #i 阅读全文
posted @ 2020-02-12 00:26 墨鳌 阅读(182) 评论(0) 推荐(0)
摘要:由于已经给出字符只有NC种,故可以把子串视为一个NC进制的数,以此构造hash函数就可以了 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include < 阅读全文
posted @ 2020-02-11 19:25 墨鳌 阅读(174) 评论(0) 推荐(0)
摘要:哈希,对于每个点哈希一次 哈希的方式:该点到联通分量边界(上下左右)的距离和 然后分别对两个图的n个点按hash值排序,判断是否相等即可 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #includ 阅读全文
posted @ 2020-02-11 13:43 墨鳌 阅读(185) 评论(0) 推荐(0)
摘要:/* 虽然题目没说,但是读入有以下特点 由于,输入是按照按照y递增,如果y相同则x递增的顺序给出的 所以,可以利用入读的时间进行降为处理 */ 于是我们就得到了一个一维的树状数组解法啦 值得一提:坐标从0~32000,而树状数组是从1开始的 于是,我们对所有下标+1,数组开到32002就可以啦! 1 阅读全文
posted @ 2020-02-10 19:27 墨鳌 阅读(127) 评论(0) 推荐(0)
摘要:二维树状数组+叉分 区间修改转化为单点修改 单点查询本来就可视为区间查询 于是本题可解 PS:不知道为什么函数传参数,传的是变量就会出现奇奇怪怪的问题? 所以读入单独写了,还有就是循环的初始化硬是多定义了一组变量,头大啊! 暂且把这种写法视为标准写法吧! #include <set> #includ 阅读全文
posted @ 2020-02-10 13:41 墨鳌 阅读(156) 评论(0) 推荐(0)
摘要:给出0~n-1的一个排列,可以整体移动,求逆序对最小值 把数字num[i]的加入,等价于树状数组的第n-num[i]位加1 因为num[i]是第 (n-1)-num[i]+1=n-num[i]大的数字,产生逆序对,只可能在其之前已经插入了数字,此时直接区间查询即可 #include <set> #i 阅读全文
posted @ 2020-02-10 00:53 墨鳌 阅读(196) 评论(0) 推荐(0)
摘要:树上的单点修改+子树查询 用dfn[u]和num[u]可以把任意子树表示成一段连续区间,此时结合树状数组就好了 #include <set> #include <map> #include <cmath> #include <queue> #include <vector> #include <cs 阅读全文
posted @ 2020-02-09 20:44 墨鳌 阅读(254) 评论(0) 推荐(0)
摘要:单点修改+区间查询=树状数组 空间复杂度O(n) 时间复杂度O(mlogn) 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include <cstdio> 阅读全文
posted @ 2020-02-09 19:27 墨鳌 阅读(175) 评论(0) 推荐(0)
摘要:时间复杂度O(n) 空间复杂度O(1) 1 #include <cstdio> 2 int main() { 3 int T;scanf("%d",&T); 4 for(int t=1,n,a,l,r,s,L,R,S;t<=T;t++) { 5 scanf("%d",&n),l=L=R=1; 6 f 阅读全文
posted @ 2020-02-08 15:07 墨鳌 阅读(171) 评论(0) 推荐(0)
摘要:1 #include <cstdio> 2 int main(){ 3 for(int a,b;~scanf("%d%d",&a,&b);printf("%d\n",a+b)); 4 return 0; 5 } hdu1000 1 #include <cstdio> 2 int main(){ 3 阅读全文
posted @ 2020-02-08 13:26 墨鳌 阅读(246) 评论(0) 推荐(0)
摘要:题意: 求数字11212312341234512345612345671234567812345678912345678910123456789101112345678910111212345678910111213...的第i位是几? 数位dp打表+二分+暴力模拟 0msAC哦!暴力美学! 1 # 阅读全文
posted @ 2020-02-07 20:11 墨鳌 阅读(201) 评论(0) 推荐(0)
摘要:贪心算法:先排序,再枚举最小带宽(B),每次更新当前最小花费(P)和以及答案(ans) #include <cstdio> #include <algorithm> using namespace std; struct data {int b,p;} a[101][101]; int m[101] 阅读全文
posted @ 2020-02-06 22:47 墨鳌 阅读(170) 评论(0) 推荐(0)
摘要:贪心算法,思路见代码 本来想搜索,结果有O(1)的算法,我佛了 其实每一种6x6的方案可以打表预处理,然后dp or search 但是既然可以贪心何乐而不为呢? 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <que 阅读全文
posted @ 2020-02-06 14:58 墨鳌 阅读(182) 评论(0) 推荐(0)
摘要:无语,15步产生16个数,植树原理啊! 大水题,居然wa了好几次,唉,自己的问题。 略略略,就要封装成结构体,略略略。 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector 阅读全文
posted @ 2020-02-06 13:26 墨鳌 阅读(111) 评论(0) 推荐(0)
摘要:以后刷OJ还是写C++,昂啊! 除非我觉得JAVA更好用 阅读全文
posted @ 2020-02-05 22:00 墨鳌 阅读(92) 评论(0) 推荐(0)
摘要:Java实现会MLE那我也没办法了 1 //辩方总分和控方总分之差简称为“辩控差” 2 //辩方总分和控方总分之和简称为“辩控和” 3 //现用f(j, k)表示,取j 个候选人,使其辩控差为k 的所有方案中,辩控和最大的那个方案 4 //规定,如果没法选j 个人,使其辩控差为k,那么f(j, k) 阅读全文
posted @ 2020-02-03 20:04 墨鳌 阅读(163) 评论(0) 推荐(0)
摘要:多重背包问题的特点是物品数量可以大于1但是有限制。状态定义与01背包一致。 多重背包的解法有多种,复杂度也各不相同。 对于物品数Ci较大的数据,可以采取二进制数进行优化(就是这样,别问就是baidu!) 如何理解多重背包的二进制优化? 使得每种物品的转移次数由O(MxCi)变为O(Mxlog(Ci) 阅读全文
posted @ 2020-02-01 14:12 墨鳌 阅读(233) 评论(0) 推荐(0)