自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU5544 线性基

简略题意:在一张图上,从任意位置出发,回到这个位置,走过的路径的亦或和最大是多少。和BZOJ2115这题基本一致,只是少了一个初值。BZOJ2115#include <bits/stdc++.h>#define maxn 110000#define LL long long//#define debugusing namespace std;vector<pair<int, LL>>G[ma

2017-09-07 14:16:37 512

原创 BZOJ2460 线性基

简略题意:nn个物品,每个物品两个权值。 1.1. 编号 2.2. 价值 现在需要选出若干个物品,使得他们的编号亦或和不为00,且价值最大。线性基中任意元素的亦或值均不为00,因此只要按价值从大到小构造线性基,然后把所有的线性基对应的价值求和即可。#include <bits/stdc++.h>using namespace std;typedef long long LL;const in

2017-09-07 14:13:42 259

原创 BZOJ 2115 线性基

简略题意:你需要找到一条从11到nn的路径,使得这条路径上的亦或和最大。这题和HDU5544本质相同。 首先考虑对于图上的一个环,那么从11走到环,然后回到11,这条路径的答案显然就是这个环的答案,因此预处理出每个环代表的数,就相当于从nn个数选取kk个数,使得答案的值尽可能变大。 不考虑环的话,我们随意找一条从11到nn的简单路径,当这条路径就是答案路径的时候,显然答案最大。如果我们找到的不是

2017-09-07 11:54:34 350

原创 线性基

1. 什么是线性基? 线性基是一组基”a[1],a[2]...a[n]a[1], a[2] ... a[n]”,a[i]中数的最高位为ia[i]中数的最高位为i,从原数组构造而来,且这一组基相互亦或组成的值域和原数组中的数相互亦或得到的值域相同。2. 如何构造线性基vector<LL> base;for(auto it : ans) { LL t = it; for(auto v

2017-09-07 11:43:02 357

原创 HDU6183 cdq分治+线段树

简要题意: 1. 每次给(x,y)染上颜色c(x, y)染上颜色c。 2. 询问x∈[1,X]y∈[y1,y2]这个矩形内部的颜色种类x \in [1, X] y \in [y1, y2]这个矩形内部的颜色种类。对于一个修改能够影响的询问,是在这个修改之后的所有xx坐标大于当前修改位置的询问。 每次询问需要回答的就是xx在小于当前位置的,且时间早于当前位置的那些修改中,[y1,y2]部分的答

2017-09-05 18:55:06 324

原创 codeforces 851C 数学

简要题意:给出nn个55维坐标系下的点,问有多少点满足任意两个点与其连线成的夹角必然大于等于π/2π/2。先考虑在二维平面下满足要求的点,以这个点为原点做平面直角坐标系,则该平面除原点外至多只会包含44个点,这四个点分别处于不同象限。否则,答案为00。 对于kk维平面,除原点外这样的点至多包含2∗k2*k个。因此当点数多于11个,答案必然不存在。否则我们暴力即可。(直接暴力也能过就是了= =!

2017-09-05 11:24:39 299

原创 codeforces 455D 分块

简略题意:初始给出长度为nn的数组a[i]a[i], 有两种操作,共q次。 1.将a[l],a[l+1],...,a[r]中的a[r]移动到a[l]处,之后的元素后移一位.1.将a[l], a[l+1], ... , a[r]中的a[r]移动到a[l]处,之后的元素后移一位. 2.问区间[l,r]有多少数等于k.2.问区间[l, r]有多少数等于k. 要求强制在线。看起来就是个数据结构头,

2017-08-30 23:25:06 285

原创 codeforces 455E Convex hull trick

简略题意:给出n个数a[i]a[i],回答mm次询问(xi,yi)(xi, yi),每次回答f(xi,yi)f(xi, yi)是多少。 ∗f(1,j)=a[j],1≤j≤n.* f(1, j) = a[j], 1 \leq j \leq n. ∗f(i,j)=min(f(i−1,j),f(i−1,j−1))+a[j],2≤i≤n,i≤j≤n.* f(i, j) = min(f(i-1, j),

2017-08-30 22:51:49 258

原创 codeforces 840D Destiny 主席树

简明题意:给出一个长为n的数组,q次询问,每次问[l, r]区间出现次数超过⌊r−l+1k⌋\lfloor\frac{r-l+1}{k}\rfloor的最小数是多少,不存在返回-1。显然对每个询问建立一棵权值线段树即可,因此使用主席树。然后就没有然后了。#include <bits/stdc++.h>using namespace std;const int maxn = 310000;struct

2017-08-27 23:42:37 294

原创 玲珑杯Round20

“愿ACM没有由乃”1157 - 造物主的戒律每次询问给出一个基准值x。 查询有两个,第一个是区间第k小,如果大于基准值则为-1。第二个也是区间第k小,首先得查出x在对应区间的排名k,之后同上。 需要注意的是原题卡双log做法,因此比起树套树,推荐函数式线段树。#include <bits/stdc++.h>using namespace std;const int maxn = 1e6+10;

2017-08-27 23:35:03 420

原创 笛卡尔树

笛卡尔树是一种treap,她有两种权值:key和val。 1. 对于key权值,她有二叉搜索树的性质。 2. 对于val权值,她有大顶堆的性质。因此我们可以对key排序之后,每次建树插入新节点就只需要考虑树上靠右的那条链即可。每次插入一个新节点,我们找到链上靠近叶子节点的,第一个val大于她的节点,插在她的右子部分即可。 我们可以维护一个单调栈来完成这个操作,易知栈顶元素靠近叶子节点,栈底元素

2017-08-26 09:48:53 312

原创 codeforces 840C On the Bench 容斥+DP

简略题意:给出n个数,要求把他们重新排列之后,没有相邻的数是完全平方数。两数相乘为完全平方数有两种可能。 1.两数本身都是完全平方数,等价于两个数的质因数的幂次都为偶数。 2.两个数的质因数都有奇数项,但相乘后(等价于对应幂次相加)为偶数。我们只考虑第二种情况即可,用一个数对应的幂次奇数项的质因子代表这个数。那么两数不能相邻当前仅当两数不相同。原问题等价于,给出n个数,要求没有两个相同的数相邻。

2017-08-21 23:55:10 835 2

原创 HDU 6153 A Secret KMP

简略题意:给出两个长度为1e6的S,T串,问T串的每个后缀在S中作为子串出现的次数记为Si, 长度为Li,问∑len−1i=0Si∗Ti\sum_{i=0}^{len-1} Si*Ti的答案。首先将两串都反转,从而变成前缀的处理关系。 对串2建立fail数组,用串1去进行匹配,再在fail树上累加一下前缀和即可。 复杂度是O(n)的。#include <bits/stdc++.h>using n

2017-08-20 08:36:38 284

原创 HDU6150 Vertex Cover

构造一个二分图,设左边有nn个点,标号是1~n。对于每个i ∈\in [1, n] ​个点,每个点都选择左边的i个点连 1 条边,最终使得左边每个点的度数都为log级别,然而此时贪心的做法会选择右边的nlognnlogn个点作为答案点,而正确答案应该是左边的nn个点。#include <bits/stdc++.h>using namespace std;int main() { int n

2017-08-19 22:38:03 202

原创 codeforces 841D Leha and another game about graph

简略题意:n个点,m条边,每个点有3种度数状态。 1. 度数为奇数, 2.度数为偶数,3.无限制。 现在需要你选择一个边集使得满足限制条件。对于一个联通的图,所有点的度数和必然为偶数,但这题存在第3类点,因此判定无解的条件为:所有点的度数和为奇数,且不存在第3类点的时候无解。除此以外必然有解(一个3类点和某个1类点连接)。我们用dp[i]表示第i个点是否应该反转,则由其子节点的状态可以唯一确定该

2017-08-19 10:24:56 378

原创 HDU6096 ac自动机+fail树

题目问每个”prefix + ’ ’ + suffix”类型的串能匹配上多少个串S。 可以做处理将”prefix + ’ ’ + suffix” 转化为 “suffix + ‘@’ + prefix”类型的串,然后把所有S串扩充成”S + @ + S”串。 问题就转化成了,给定m个串,问每个串是多少个s串的子串。 首先不考虑前缀后缀不允许重合的条件。 将m个串建ac自动机,分别用n个串去匹配

2017-08-18 13:01:24 414

原创 codeforces314D 二分+滑窗

首先先将坐标轴旋转,之后二分答案,维护滑窗,前后缀优化判定连通性即可。#include <bits/stdc++.h>using namespace std;const int maxn = 110000;const double eps = 1e-8;int n;double premax[maxn], premin[maxn];double sufmax[maxn], sufmin[max

2017-08-16 15:46:02 321

原创 codeforces106E 模拟退火

找到点即可,比较显然的模拟退火。#include <bits/stdc++.h>using namespace std;#define all(x) x.begin(), x.end()typedef long long LL;const LL maxn = 3300;const double eps = 1e-8;double r;int n;struct Point { dou

2017-08-16 15:45:00 483

原创 codeforces630Q 几何

棱锥的体积是棱柱的1/3,随便怎么求都可以。#include <bits/stdc++.h>using namespace std;#define all(x) x.begin(), x.end()typedef long long LL;const LL maxn = 1e5+100;double x, y, z;int main(){ scanf("%lf%lf%lf", &x,

2017-08-16 15:43:57 371

原创 codeforces406D LCA+凸包

首先我们来想一下,如果两个山顶间有连边,意味着两座山中间没有任何一座山高于这两座山的连线。 加入从左到右三座山分别是p, q, r,这就意味着Kpq >= Kqr,否则q山将是不合法的,这其实就是在维护一个凸包。 接下来的问题是,我们需要能够到达当前能够到达的最右端的山峰,并且在这里我们能和团队中的另一个人相遇。 第一个问题我们可以反向维护一个下凸壳来解决,之后我们就得到了当前山峰能够到达的最

2017-08-16 15:42:09 319

原创 codeforces2C 模拟退火

比较显然的模拟退火。 如果我们知道了点的坐标,那么其与其他三个圆的角度就可以得到了。我们需要最大化角度,这点不是很清楚,大概是因为这个点唯一?#include <bits/stdc++.h>using namespace std;struct Circle { double x, y, r; void in() { scanf("%lf%lf%lf", &x, &

2017-08-16 15:40:54 302

原创 codeforces610D 矩形面积并

点相当于格,则先将右上角坐标x++, y++,将格转化成点。原问题等价于矩形面积并。 扫描线解决即可,枚举y扫描线,需要离散化x坐标轴。对于x坐标轴的离散化,需要将线段树原有的[l,r]闭区间转化成[l, r)左开右闭区间。这样每一点都代表一段区间V[r+1] - V[l]。#include <bits/stdc++.h>using namespace std;#define all(x) x.

2017-08-16 15:39:15 211

原创 codeforces 24C 找规律

X轴与Y轴独立,且当n为奇数时,循环节为2*n。#include <bits/stdc++.h>#define aint(x) x.begin(), x.end()using namespace std;typedef long long LL;const int maxn = 111;const int pi = acos(-1.0);struct Point { int x,

2017-08-16 15:37:25 240

原创 CodeForces 600D 圆的面积交

#include <bits/stdc++.h>#define aint(x) x.begin(), x.end()using namespace std;typedef long long LL;const int maxn = 111;const long double pi = acos(-1.0);struct Point { long double x, y; Po

2017-08-16 15:01:32 305

空空如也

空空如也

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

TA关注的人

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