自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 POJ - 1201 - 差分约束

题目链接:https://vjudge.net/problem/POJ-1201 解题思路:差分约束设f[i+1]为0-i区间最少花费数,那么有f[b+1]-f[a]>=c[i],还有默认条件0<=f[i]-f[i-1]<=1.根据此三个条件建立图跑最短路即可.#include <iostream>#include <algorith...

2018-10-30 20:51:19 181

原创 Gym - 101611G - 差分约束系统

题目链接:https://vjudge.net/problem/Gym-101611G 解题思路;解法一;判断列上横值相加是否为0和横上列值相加是否为0,如果全是则有解,否则无解,如果列上横值相加等于0,那么就说明可以把这一列的所有横值都变为0.假设一列的横值为x1,x2,x3....那么在此列的第一个行设置风力为-x1,那么第一个值就变为0,x2则需加上相反数也就是x1,...

2018-10-30 20:45:50 367

原创 SPOJ - CATTACK - 最短路或者dp

题目链接:https://vjudge.net/problem/SPOJ-CATTACK 解题思路;根据思路建图跑最短路,或者dp更简单. #include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;const int mx = 2e5+10;struct node{ int y,w;...

2018-10-30 20:28:41 207

原创 SPOJ - ABSURD - 思维题

题目链接:https://vjudge.net/problem/SPOJ-ABSURD 解题思路:如果左端点和右端点数字长度不一样,那么就是2没跑了.否则找到连个端点数从最高位开始第一个不相同的数然后判断这位数可以取0或者5或者其他数,后面的位数都可以是0了. #include<bits/stdc++.h>using namespace std;typed...

2018-10-30 20:25:52 160

原创 SPOJ - HACKING - 后缀自动机

题目链接:https://vjudge.net/problem/SPOJ-HACKING 解题思路:建个后缀自动机,然后在树上跑前K个字符的dfs,直到遇到树上没有的即停止.算法复杂度O(n*m) #include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;const int mx =...

2018-10-30 20:18:04 144

原创 Gym - 101611H - 思维+数学

题目链接:https://vjudge.net/problem/Gym-101611H 解题思路:由于我们得到了m个位置及他的值,那么可以将原区间分成m+1个区间,对这些个区间求区间可以取到的最小值和最大值,最后累加最小值和最大值,看T是否在其中就是他到底有没有解.最小值求法:对于一个区间的左端点b[i-1]和右端点b[i]让从b[i-1]一直下降一格直到不能下降后最后一直上升...

2018-10-30 20:07:11 349

原创 Gym - 101611D - 思维

题目链接:https://vjudge.net/problem/Gym-101611D 解题思路:从1开始遍历找到第一个小于128的数是一个式子,那么保证了这个式子一定是非负数,因为前面的数是大于等于128的.然后这样一轮一轮的下去就ok了. #include <bits/stdc++.h>using namespace std;typedef long ...

2018-10-30 19:50:35 221

原创 SPOJ - TBGAME - 凸包+计算几何

题目链接:https://vjudge.net/problem/SPOJ-TBGAME 解题思路:1.两线段不想交时肯定有解,理解为将一条线段作为分界线,各自在自己的部分走肯定不会相交.2.两线段相交时,如果有解,一定存在一条线段的开始点到终点可以把其他点都遍历,然后另一个开始点直接连到终点.这两条路径不会相交.假设另一个开始点直接连终点形成线段l,以l做分界线,s在一头,...

2018-10-26 20:59:16 155

原创 Gym - 101635C - dfs+矩阵快速幂

题目链接:https://vjudge.net/problem/Gym-101635C 解题思路;对于每一列一共有(1<<n)个状态,0表示没方块,1表示有,对于f[m][i]表示前m-1列都是满的,第m列是i个状态的方案数,那么f[m][i]就可以从f[m-1][]中的若干个转移过来.然后利用dfs求出系数矩阵,之后进行快速幂.1.在m列的第j行放一共1*1的方块...

2018-10-26 20:42:10 218

原创 bzoj 1938 - 类欧几里得+线段树

题目链接:https://darkbzoj.cf/problem/1938 解题思路;对于区间更新:前半部分可以用线段树求等差数列和,后半部分可以用类欧几里得算法求出值类欧几里得然后是要对区间离散化,其中有个问题在于对于区间(l,r)分裂为(l,mid)和(mid+1,r)都是mid-mid+1中还有值,所以对于区间(l,r)实际包含的是(num[r+1]-num[...

2018-10-25 18:27:34 374

原创 bzoj 4504 - 主席树+区间修改

题目链接:https://darkbzoj.cf/problem/4504 解题思路:题目跟洛谷P2048 差不多,主要差在区间数只能统计一次,洛谷那题区间一样的数可以重复统计.那么就可以用pre[i]表示i这个数上一次出现的位置在哪,那么对于新的主席树更新区间就是(pre[i],i),之后的操作与洛谷P2048几乎相同https://blog.csdn.net/a121403...

2018-10-25 18:17:42 781

原创 Gym - 101635K - 凸包+(三分或叉积)

题目链接:https://vjudge.net/problem/Gym-101635K 解题思路:寻找最小覆盖矩形使得能把蛋糕上面所有的点都覆盖,求出他的宽度,高度不限.那么首先求出n个点组成的凸包.枚举凸包上的所有边,再找凸包上的一个离这条边最远的点,经过此点做边的平行线。那么此两条平行线无限延长肯定能覆盖所有的点,宽度就是两平行直线的距离.取每条边都这么做然后最后取答案...

2018-10-25 18:11:48 239

原创 洛谷 P2048 主席树+区间修改

题目链接:https://www.luogu.org/problemnew/show/P2048 解题思路:建立主席树对于第i颗线段树来说,区间(l,r)表示左端点是l-r的点,右端点是i的区间情况,对此第i颗线段树由i-1颗转移过来时只需要对当前线段树进行(1,i)区间都加上a[i]的值,那么这个操作就可以做区间更新,之后就是维护线段树区间最大值和位置就OK了.然后先把i个最大值...

2018-10-21 23:02:21 1628

原创 hdu 4348 - 区间修改主席树

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4348 题目链接:时间倒流那肯定是主席树啊,然后区间修改要用永久标记.下传标记不能使用,空间会炸. #include <iostream>#include <algorithm>#include <cstdio>#include <c...

2018-10-17 23:26:25 203

原创 poj 3368 - RMQ

题目链接:https://vjudge.net/problem/POJ-3368 解题思路:题目给出不降序列,令f[i] = v[i]==v[i-1]? f[i]+1 : 1;查询区间f[i]的最大值可以RMQ,都是要对l进行剪切,使得v[l]的值是第一次出现的位置才行. #include <iostream>#include <algorithm...

2018-10-17 23:22:46 145

原创 hdu 5730 - CDQ分治 + fft

题目链接:点击这里 解题思路:dp[]表示长度为i的项链的方案值.dp[i] = ∑dp[j]*a[i-j] (j<i)两边都有dp[],所以选择分治FFT #include <bits/stdc++.h>using namespace std;typedef long long ll;const double pi = acos(-1);c...

2018-10-09 21:35:17 180

原创 牛客国庆集训派对Day4 F - NTT

题目链接:点击这里 解题思路:f(x)的i阶导可以写为:                                                                 那么总的式子就是:                               变换f(x)第i此导,使得式子对应第j位对应x的j次方的系数:                  ...

2018-10-09 21:31:25 195

原创 牛客国庆集训派对Day6 F - DP

题目链接:点击这里 解题思路:g[i]表示i个点不做里面没有重儿子的最大花费值,dp[i]表示i个点的树的最大花费值.因为每次i从1枚举,所以g[i]的树中,最大树节点数不会超过i.所以可以直接dp #include <bits/stdc++.h>using namespace std;typedef long long ll;const double ...

2018-10-09 21:18:32 246

原创 牛客国庆集训派对Day6 I - 树链剖分

题目链接:点击这里 解题思路;懒人标记树链剖分更新区间最大值,然后每次查询区间内最大值有等于K的,之后改为-inf.时间复杂度O(n*logn*logn) #include<bits/stdc++.h>#define inf 0x3f3f3f3f#define lson l,mid,rt<<1#define rson mid+1,r,rt&l...

2018-10-09 21:14:02 101

原创 牛客国庆集训派对Day6 J - LCA+生成树

题目链接:点击这里解题思路:因为边最多是点的+100,所以我们先生成一个生成树,然后剩下最多100个边.如果最小解不在生成树上面,那么最小解肯定会经过剩余100个边的某个端点,那么接下来把这剩下100个边的每个边拿去一个端点跑bfs(长度为1直接bfs)最短路,最后把生成树上面的最短路,和100个端点的最短路取最小就行了.#include<bits/stdc++.h...

2018-10-09 21:03:44 212

原创 牛客国庆集训派对Day6 - E DP

题目链接:点击这里 解题思路:假设现在处于(x,y)位置刚获得一个奖励,那么肯定x∈(a数组),y∈(b数组),所以将a数组,b数组,离散化变成矩阵,那么dp[i][j] = max(dp[i-1][j],r,dp[i][j-1]+c),因为要到达(i,j)第一种先到达i,第二种是先到达j. #include&lt;bits/stdc++.h&gt;#define in...

2018-10-09 20:56:19 131

原创 牛客国庆集训派对Day6 - A 最小费用流

题目链接:点击这里 解题思路:(n+1)^2 = n^2 + 2*n + 1, 将根数变成点,一个区域和x根的点的连边花费就是2*x+1,这样跑最小费用流就OK了. #include&lt;bits/stdc++.h&gt;#define inf 0x3f3f3f3fusing namespace std;typedef long long ll;const int ...

2018-10-09 20:43:10 163

原创 牛客国庆集训派对Day6 - B 差分

题目链接:点击这里 解题思路:把问题转化成前缀和,那么再求前缀和的时候就是dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1]然后在分情况讨论一下就OK了. #include&lt;bits/stdc++.h&gt;using namespace std;typedef long long ll;const int N ...

2018-10-09 20:38:12 128

原创 牛客国庆集训派对Day6 - H 贪心

题目链接:点击这里 解题思路:本题可以理解为前一半是每次都爬到比自己在的更高的山,后一半是每次都下到比自己更低的山.所以答案就是2*max(a[i]) #include&lt;bits/stdc++.h&gt;using namespace std;typedef long long ll;const int N = 998244353;const int mx ...

2018-10-09 20:34:44 176

原创 hdu 5772 - 最大带权闭合子图

题目链接:点击这里 解题思路:如果我们选了(i,j)点对,那么就会获得w[i][j]+w[j][i]的利益.那么我们在原有的点上增加(n*(n-1))/2个点对点,和10个0~9的字符点.原来的点对应的权值就是改点所对应字符值得ax0~9字符点的权值就是bx-ax,点对点的权值就是w[i][j]+w[j][i].除了正权连源点S,负权连汇点T之外,(i,j)连j和i,i连对应字...

2018-10-04 15:40:35 166

原创 hdu 4971 - 最大带权闭合子图

题目链接:点击这里 解题思路:最大带权闭合子图入门题.按照题目意思建图,然后跑网络流即可. #include&lt;bits/stdc++.h&gt;#define inf 0x3f3f3f3ftypedef long long ll;using namespace std;const int mx = 1e2 + 10;int n,m,S,T,dep[mx],tot;...

2018-10-04 15:29:31 233

原创 BZOJ 4066 - KDtree + 重构

题目链接:点击这里解题思路:这题被强制在线了如果是离线(BZOJ 2683)可以CDQ分治 + 树状数组做.所以只能用KDtree了.若每次都将新节点插入原DKT中,最终会导致树会非常的不平衡,而失去了意义,导致超时.所以我们要设置一个阈值,当节点数到达阈值时就对KDT进行重构保证稳定.#include&lt;cstdio&gt;#include&lt;cs...

2018-10-03 13:59:00 282

原创 BZOJ 2648 - KDtree+新建节点

题目链接:点击这里解题思路:对原始的N的点建立KDtree,对于M个操作,黑棋加入新节点,白棋查询最近曼哈顿距离.这就迎刃而解了.#include&lt;bits/stdc++.h&gt;#define inf 0x3f3f3f3f#define fi first#define se secondusing namespace std;const int mx ...

2018-10-03 13:53:06 376

原创 hdu 4742 - CDQ分治 + 树状数组

题目链接:点击这里 解题思路:将一个轴(z轴)从小到大排序(排序过程注意x,y也要讨论).之后的问题就变成了在排序数组中找到最长上升序列问题了.然后用CDQ分治 + 树状数组,x轴排序,y轴用树状数组维护,就ok了. #include&lt;bits/stdc++.h&gt;#define fi first#define se secondusing namespace...

2018-10-02 13:29:06 240

原创 hdu 5324 - CDQ分治 + 树状数组

题目链接:点击这里 解题思路:将L,R看做平面直角坐标系坐标(x,y),将R变成-R,那么就变成x轴,y轴持续变小的最长连续序列.用CDQ分治 + 树状数组,x轴排序,y轴用树状数组维护.先处理有半部分在根据有半部分得到左半部分. #include&lt;bits/stdc++.h&gt;#define fi first#define se secondusing na...

2018-10-02 13:19:35 193

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除