随笔分类 -  OJ

摘要:"uva10256" 题意 平面上存在两种颜色的点,问是否存在一条直线,使得任取一个红点和一个蓝点都在直线的异侧,这条直线不经过任何点。 分析 对每种颜色的点求一发凸包,问题等价于判断两个多边形是否相交或相切。 1. 判断是否有边相交 2. 判断是否有点在另一个多边形内或边上 code cpp in 阅读全文
posted @ 2017-08-17 22:15 ftae 阅读(326) 评论(0) 推荐(0)
摘要:"uva11168" 题意 给出一些点坐标,选定一条直线,所有点在直线一侧(或直线上),使得所有点到直线的距离平均值最小。 分析 显然直线一定会经过某两点(或一点),又要求点在直线某一侧,可以直接求出凸包,枚举每条边作为直线。 现在就要快速求出所有点到直线的距离,有求点到直线距离方程 $\frac{ 阅读全文
posted @ 2017-08-16 22:24 ftae 阅读(135) 评论(0) 推荐(0)
摘要:"zoj2318" 题意 一个平面上给出很多圆,其中一个圆为现在自己的位置,问这个圆能不能冲出其它圆的包围(不能与其它圆相交)。 分析 将所有圆心平移,使得自己的圆圆心处于原点,将所有圆半径增加自己圆的半径,这样自己的圆可以看成一个点,任意两圆相交我们都可以看作圆心间连了一条边,问题就转化成了一个点 阅读全文
posted @ 2017-08-16 22:20 ftae 阅读(114) 评论(0) 推荐(0)
摘要:"hdu6121" 题意 给出一棵树,$0$ 为根节点,节点 $i$ 的父节点标号是 $\lfloor\frac{i 1}{k}\rfloor$,求所有子树大小的异或和。 分析 找规律。在纸上画个十几个一定可以找到规律(亲测有效)。 虽然数据很大,但是我们可以特判掉 $k=1$ 的情况,同样有规律。 阅读全文
posted @ 2017-08-15 23:23 ftae 阅读(195) 评论(0) 推荐(0)
摘要:"hdu6127" 题意 二维平面上存在一些点,每个点都有权值,任意两点组成的线段的权值为这两点权值的乘积,选定一条经过原点的直线,问怎样使得它经过的线段的权值之和最大。 分析 题目等价于用一条直线将平面上的所有点分成两部分,那么答案就是两部分点的权值和的乘积。 比如说一条与 $y$ 轴重合的直线, 阅读全文
posted @ 2017-08-15 23:22 ftae 阅读(148) 评论(0) 推荐(0)
摘要:"poj3233" 题意 给出一个 $n \times n$ 的矩阵 $A$ ,求 $A + A^2 + A^3 + ... + A^k$ 。 分析 构造矩阵 $$ \begin{bmatrix} A & E \\ 0 & E \\ \end{bmatrix} $$ 记为 $B$ ,其中 $A$ 为 阅读全文
posted @ 2017-08-12 21:06 ftae 阅读(957) 评论(0) 推荐(1)
摘要:"hdu6086" 题意 字符串只由 $01$ 组成,求长度为 $2L$ 且包含给定的 $n$ 个子串的字符串的个数(且要求字符串满足 $s[i] \neq s[|s| i + 1]$)。 分析 没有想到可以暴力预处理中间那些字符。 官方题解: 如果没有反对称串的限制,直接求一个长度为 $L$ 的 阅读全文
posted @ 2017-08-09 22:36 ftae 阅读(190) 评论(0) 推荐(0)
摘要:"hdu2825" 题意 给出一些字符串,要求构造一个长度为 $n$ 的字符串至少包括其中的 $k$ 个,问有多少种字符串满足条件。 分析 AC自动机 构造状态转移,然后 状态压缩DP 即可。 $dp[i][j][k]$ 表示长度为 $i$ 在 AC自动机上的状态为 $j$ 已包含的字符串为 $k$ 阅读全文
posted @ 2017-08-09 22:23 ftae 阅读(141) 评论(0) 推荐(0)
摘要:"poj2778" 题意 构造只包含 $A, T, C, G$ 的字符串,且满足不出现指定的一些字符串,问长度为 $n$ 的字符串有多少种 ? 分析 AC 自动机 + 矩阵快速幂的~~神题~~ ,知识点很多。。。 AC 自动机为了给不同的状态之间建边,矩阵快速幂是为了加速状态转移。 比如说一共有 $ 阅读全文
posted @ 2017-08-09 22:15 ftae 阅读(142) 评论(0) 推荐(0)
摘要:"uestc1633" 题意 给你一个大小为 $n$ 的集合 $S$ ,集合里有 $n$ 个互不相同正整数,有 $q$ 个询问,每次询问是否能选择 $S$ 中的一些数字 ( 同一个数字可以选择多次,也可以任何数字都不选),使它们相加的和为 $m$ 。 分析 这种题型 ~~竟然~~ 可以套用最短路的模 阅读全文
posted @ 2017-08-05 22:26 ftae 阅读(143) 评论(0) 推荐(0)
摘要:"hdu6070" 题意 给出 $n$ 个数, $\frac{x}{y}$ 表示某个区间不同数的个数除以区间的长度,求 $\frac{x}{y}$ 最小值。 分析 设 $size(l, r)$ 表示 $[l, r]$ 这个区间内不同数的个数,那么求得就是 $\frac{size(l, r)}{r l 阅读全文
posted @ 2017-08-05 22:24 ftae 阅读(168) 评论(0) 推荐(0)
摘要:"hdu6071" 题意 四个点连接形成一个环,给出相邻两个点的距离,求从点 $2$ 出发再回到 $2$ 的路程大于等于 $K$ 的最小值。 分析 首先我们让 $w=min(d12, d23)$ ,那么如果存在一个合法的路程 $k$ 必然会存在路程 $k + 2 w$ 。 让 $d[x][v]$ 表 阅读全文
posted @ 2017-08-05 22:24 ftae 阅读(563) 评论(0) 推荐(0)
摘要:"hdu6059" 题意 给定数组 $A$ ,问有多少对下标 $(i, j, k)$ 满足 $i typedef long long ll; using namespace std; const int MAXN = 2e6 + 10; int n; int a[MAXN]; int root, L 阅读全文
posted @ 2017-08-02 22:28 ftae 阅读(131) 评论(0) 推荐(0)
摘要:"hdu4757" 题意 给出一棵树,每个节点有权值,每次查询节点 $(u, v)$ 以及 $x$ ,问 $u$ 到 $v$ 路径上的某个节点与 $x$ 异或最大的值是多少。 分析 Trie 的新姿势! 如果直接问 $x$ 与某个区间中哪个数异或后最大,那么直接把区间所有数转化成二进制数(从高到低位 阅读全文
posted @ 2017-08-02 22:26 ftae 阅读(751) 评论(0) 推荐(0)
摘要:"csu1216" 题意 给定一些数,求这些数中两个数的异或值最大的那个值。 分析 转化成二进制数存入字典树,比如说要查询 $0011$ ,显然和 $1100$ 结合最优,所以我们直接在字典树上寻找 $1100$ ,如果某一位没找到不管它继续往下找,因为我们是从高到低位存的,所以找得到的一定是最优的 阅读全文
posted @ 2017-08-02 22:23 ftae 阅读(146) 评论(0) 推荐(0)
摘要:"hdu6058" 题意 定义 $f(l, r, k)$ 函数为区间 $[l, r]$ 第 $k$ 大的数,如果 $r l + 1 typedef long long ll; using namespace std; const int MAXN = 5e5 + 10; int n, k; int 阅读全文
posted @ 2017-08-01 21:55 ftae 阅读(236) 评论(0) 推荐(0)
摘要:"hdu6049" 题意 给出一串由 $[1, n]$ 组成的 $n$ 个数,每个数字都不相同。现在要尽可能的分成多个块,每个块内的数可以任意排序,且分完块后可以交换两个块的位置,问使得最后序列有序可以最多分成几个块。 分析 首先暴力预处理出 $f[i][j]$ 表示区间 $[i, j]$ 最多可以 阅读全文
posted @ 2017-07-30 21:22 ftae 阅读(220) 评论(0) 推荐(0)
摘要:"hdu6052" 题意 给出一个 $n m$ 的网格矩阵,每个格子都有颜色,随机选出一个子矩阵,问颜色种数的期望。 分析 那么我们可以去算所有矩阵的颜色种数之和,也就是每种颜色出现过的矩阵的个数之和,除以子矩阵的个数就是答案。 为了避免重复,我们要规定哪些矩阵属于某个格子。如果一些格子颜色为 $1 阅读全文
posted @ 2017-07-30 21:21 ftae 阅读(119) 评论(0) 推荐(0)
摘要:"hdu6041" 题意 给出一个 "仙人掌" 。 如果一个无向连通图的任意一条边最多属于一个简单环,我们就称之为仙人掌。所谓简单环即不经过重复的结点的环。 求前 $K$ 小生成树 。 分析 仙人掌中每个环中我们最多可以删掉一条边,题目就变成了有 $M$ 个数组,每次从每个数组中分别取一个数字并求和 阅读全文
posted @ 2017-07-30 21:20 ftae 阅读(120) 评论(0) 推荐(0)
摘要:"hdu1269" 题意 判断对于任意两点是否都可以互相到达(判断有向图强连通分量个数是否为 1 )。 分析 Tarjan 算法实现。 code cpp include typedef long long ll; using namespace std; const int MAXN = 2e5 + 阅读全文
posted @ 2017-07-30 21:17 ftae 阅读(822) 评论(0) 推荐(0)