自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU 2303 暴力

题意传送门 HDU 2303题解若存在可整除 KKK 的因数 ppp#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;#define maxn 1000000#define maxm 105int L, prime[maxn + 1];bool is_prime[maxn + 1];char K[maxm

2020-09-30 17:06:38 86

原创 HDU 1124 因数

题意传送门 HDU 1124题解N!N!N! 最右侧的连续 000 只可能由因数 2,52,52,5 构成,求 N!N!N! 中 2,52,52,5 能组成的最多个因数 101010 即可。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;int T, N;int fac(int n, int d){

2020-09-30 08:56:55 60

原创 P1438 差分 + BIT

题意传送门 P1438题解考虑将区间上增加的等差数列差分处理,以方便更新区间信息,再求前缀和。解法一BITBITBIT 维护前缀和,等差序列端点的差分值,单点更新;区间内的差分值是一个常数,考虑将前缀和结果表示为索引值 iii 的 nnn 次多项式,用 n+1n+1n+1 个 BITBITBIT 数组维护;这里多项式次数为 111,即前缀和等于 sum(bit0,i)+i×sum(bit1,i)sum(bit0,i) + i\times sum(bit1,i)sum(bit0,i)+i×sum(b

2020-09-29 22:40:27 139

原创 HDU1060 对数

题意传送门 HDU 1060题解设 x=NNx=N^Nx=NN,等式两端取对数lg(x)=N×lg(N)lg(x)=N\times lg(N)lg(x)=N×lg(N) 再同时取指数 x=10N×lg(N)x=10^{N\times lg(N)}x=10N×lg(N) 对于以 101010 为底的指数,整数项指数为 10…010\dots 010…0,则 xxx 最左侧的数字取决于小数项的指数,且此时保证 x′∈[0,1)x'\in [0,1)x′∈[0,1) 时 10x′∈[1,10)10^{x'

2020-09-29 10:59:41 52

原创 Codeforces 17D 拓展欧拉定理

题意Codeforces 17D题解求 bn−1×(b−1)b^{n-1}\times (b-1)bn−1×(b−1) 模 ccc 的余数。根据基本模运算,有原式等于 (b mod c)n−1×((b mod c)−(1 mod c)) mod c(b\ mod\ c)^{n-1}\times((b\ mod\ c)-(1\ mod\ c))\ mod\ c(b mod c)n−1×((b m

2020-09-28 23:25:02 144

原创 POJ 2749 二分 + 2-SAT

题意传送门 POJ 2749题解最小化最大值问题,二分答案。若任意两个粮仓间的最大距离不能超过某个值,根据这个限制条件使用 2−SAT2-SAT2−SAT 判断是否存在合法答案。定义布尔变量xi为真⇔节点i连接S1x_i 为真 \Leftrightarrow节点i连接S1xi​为真⇔节点i连接S1 对于记恨的两个节点,有 ¬((xi∧xj)∨(¬xi∧¬xj))\lnot \big((x_i\land x_j)\lor (\lnot x_i\land\lnot x_j)\big)¬((xi​∧xj​

2020-09-28 22:05:10 120

原创 LeeCode 968 树状 DP

题意传送门 LeeCode 968. 监控二叉树题解假设节点满足其子树都被覆盖,则节点存在是否放置摄像头 222 种可能,以及是否被覆盖 222 种可能;状态合并后共有 333 中可能状态:节点无摄像头且未被覆盖(1),节点无摄像头且被覆盖(2),节点有摄像头(3)。dp[p][i]dp[p][i]dp[p][i] 代表以 ppp 为父节点的子树在状态 iii 所需安装的最少摄像头数。设左儿子/右儿子节点为 chchch,另一个儿子节点为 ch′ch'ch′,则有{dp[p][1]=dp[ch][

2020-09-26 17:45:47 54 1

原创 P3116 [USACO15JAN] DP

题意传送门 P3116 [USACO15JAN]Meeting Time题解求两人从节点 111 到 NNN 相同花费的最小值。路径是一个 DAGDAGDAG。dp[i][j][k]dp[i][j][k]dp[i][j][k] 代表第 iii 个人抵达节点 jjj 是否可能花费为 kkk,设 eee 为所有以 jjj 为起点的边,则有递推dp[i][e.to][k+e.cost] ∣=dp[i][j][k]dp[i][e.to][k + e.cost]\ |= dp[i][j][k]dp

2020-09-22 11:00:47 90

原创 HDU 1350 最大二分匹配

题意传送门 HDU 1350题解将每一个预约的事件看成节点,若某个司机可以在预约事件 iii 完成后执行预约事件 jjj,则从 iii 向 jjj 连一条边,由于开车时间的单增性,可以得到一个 DAGDAGDAG。问题转化为求 DAGDAGDAG 中使用尽可能少的路劲覆盖全部顶点。将每个点拆成 222 个,分别为 vvv 和v′v'v′;若 DAGDAGDAG 存在 e=(u,v)e=(u,v)e=(u,v),则从 uuu 向 v′v'v′ 连边。所构造二分图的最大匹配可以看做路径上最多的前驱节点数

2020-09-20 22:03:58 86

原创 P3119 [USACO15JAN] SCC 分解 + SPFA

题意传送门 P3119 [USACO15JAN]题解显然节点 111 可以遍历其强连通分量内的各点。使用一次 DFSDFSDFS 对顶点后序遍历进行标号,第二次 DFSDFSDFS 跑反向图的方法进行强连通分量分解。将强连通分量缩成一个顶点后,得到一个 DAGDAGDAG。设 111 所在的强连通分量所缩点为 sss,目标是走 DAGDAGDAG 内某条边的反向边使之形成一个包含节点 sss 的环。枚举需要反向的边 e=(v,u)e=(v,u)e=(v,u),若存在从节点 sss 到 uuu 以及从

2020-09-20 21:08:51 80

原创 POJ 2342 树形 DP

题意传送门 POJ 2342题解dp[i][j]dp[i][j]dp[i][j] 代表节点 111 取(j=1j=1j=1)或不取(j=0j=0j=0)的最大值,则有dp[i][0]=∑j为i子节点max{dp[j][0],dp[j][1]}dp[i][0]=\sum_{j为i子节点} max\{dp[j][0],dp[j][1]\}dp[i][0]=j为i子节点∑​max{dp[j][0],dp[j][1]}dp[i][1]=rating[i]+∑j为i子节点dp[j][0]dp[i][1]=r

2020-09-20 09:29:13 201

原创 P3115 [USACO15JAN] Dijkstra

题意传送门 P3115 [USACO15JAN]题解建图只对航线相邻路线连边,此时对于各城市有抵达该市的航线数种状态,将城市的各状态看做将其拆成数个节点,根据当前边的航线索引与前驱节点的状态更新花费与路线数。松弛条件改为优先使路径花费最小,再使通过的路线数(所搭乘各航线的各段路线数量)最小,DijkstraDijkstraDijkstra 求最短路即可。#include <bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3

2020-09-19 23:39:43 94

原创 AOJ 1312 二维 Hash

题意传送门 AOJ 1312题解使用二维滚动哈希计算得到图片中所有 p×pp\times pp×p 的子阵哈希值,以及旋转、镜面翻转共 2×42\times 42×4 种模式子阵的哈希值,枚举各位置进行匹配即可。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;#define inf 0x3f3f3f3f#de

2020-09-19 16:35:58 110

原创 AOJ 2212 AC 自动机 + BFS

题意传送门 AOJ 2212题解ACACAC 自动机预处理出迷宫路线对应的字符串的后缀模式。以后缀模式为状态,若状态对应节点或其失配指针指向的节点为禁止模式串,则此状态包含禁止模式。以坐标位置、路线后缀状态为总的状态,BFSBFSBFS 求最短路即可。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <queue>usi

2020-09-18 23:07:59 138

原创 POJ 1986 LCA + RMQ + BIT / 倍增

题意传送门 POJ 1986题解LCA + RMQ + BIT将树转为从根 DFSDFSDFS 标号后得到的序列,使用基于 RMQRMQRMQ 的算法求 LCALCALCA,用 BITBITBIT 维护边权和。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <vector>using namespace std;#d

2020-09-18 20:49:52 69

原创 POJ 1985 DFS

题意传送门 POJ 1985题解路径组成一颗树,那么找到度为 111 的节点,以其为根节点 DFSDFSDFS 更新答案,可能的答案为以某个节点为起点的 222 条路径和的最大值。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <vector>using namespace std;#define maxn 40005

2020-09-18 16:37:36 133

原创 POJ 1984 带权并查集

题意传送门 POJ 1984题解路径组成一棵树,带权并查集维护连通性以及节点相对根节点的 x,yx,yx,y 轴偏移值。若查询时节点不连通,则无法求解;反之,输出相对距离即可。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;#define maxn 40005int N, M, K, F1[maxn], F2

2020-09-18 16:14:14 95

原创 POJ 3250 单调栈

题意传送门 POJ 2350题解非严格单调栈若考虑每一头牛可以看到的数量,则需要求解满足 h[j]>=h[i]h[j]>=h[i]h[j]>=h[i] 的最大的 jjj,逆向遍历,非严格单调栈求解。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;#define inf 0x3f3f3f3f

2020-09-18 12:26:50 107

原创 POJ 2723 二分 + 2-SAT

题意传送门 POJ 2723题解定义布尔变量 xi为真⇔使用钥匙ix_{i}为真\Leftrightarrow 使用钥匙 i xi​为真⇔使用钥匙i 对于成对的钥匙,相互之间至多能使用一把,则有 ¬xi∨¬xj\lnot x_{i}\lor \lnot x_{j}¬xi​∨¬xj​ 为真;对于门上的一对所,至少需要打开一个,则有 xi∨xjx_{i}\lor x_{j}xi​∨xj​ 为真。那么能打开到第 kkk 道门说明存在存在一组布尔变量使得布尔方程值为真,是一个 2−SAT2-SAT2−SAT

2020-09-17 22:18:49 89

原创 POJ 3678 2-SAT

题意传送门 POJ 3678题解op=ANDop=ANDop=AND 时,有{¬a∨¬b=1c=0a=1,b=1c=1\begin{cases}\lnot a\lor \lnot b =1 & c=0\\a=1,b=1 & c=1\\\end{cases}{¬a∨¬b=1a=1,b=1​c=0c=1​op=ORop=ORop=OR 时,有{¬a=1,¬b=1c=0a∨b=1c=1\begin{cases}\lnot a=1,\lnot b=1 & c=0\\a\

2020-09-17 21:16:56 76

原创 POJ 1236 SCC 分解

题意传送门 POJ 1236题解两次 DFSDFSDFS 进行强连通分量分解,并记录其拓扑序。遍历原图,对端点属于不同强连通分量的边在新图进行连边,就实现了将分解后的强连通分量缩成一个顶点,此时得到了一个 DAGDAGDAG(有向无环图)。子任务 AAA 需要发送最少次数以遍历全部学校。对于入度为 000 的点,必须发送一次;DAGDAGDAG 中任一入度非 000 的节点,存在至少一个拓扑序小于这个节点且能到达这个节点的入度为 000 的节点;那么答案即 DAGDAGDAG 入度为 000 的节点

2020-09-17 19:32:10 100

原创 POJ 3180 SCC 分解

题意传送门 POJ 3180题解求节点数大于 111 的强连通分量个数,通过两次 DFSDFSDFS 进行强连通分量分解即可。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <vector>using namespace std;#define maxn 10005int n, m, cmp[maxn];vecto

2020-09-16 22:20:01 99

原创 POJ 2728 二分 + Prim

题意传送门 POJ 2728题解分数规划问题,二分求解,即求满足 ∑costi∑leni≤x\frac{\sum cost_{i}}{\sum len_{i}}\leq x∑leni​∑costi​​≤x 的 xxx 最小值。不等式变形 ∑(costi−x×leni)≤0\sum (cost_{i}-x\times len_{i})\leq 0∑(costi​−x×leni​)≤0 若存在满足上式的一棵生成树,则可以收缩上界。显然,不等式右端的最小值可以通过求最小生成树进行求解。考虑到图中任一对节点

2020-09-16 20:58:02 72

原创 LCP 21 拓扑 + BFS

题意传送门 LCP 21. 追逐游戏题解图中存在 NNN 个节点与 NNN 条边,且图连通,那么图中存在一个环。按照求拓扑序的方法,依次删除度为 111 的节点相连的边,最终度大于 111 的节点即在环上。若 AAA 无法追到 BBB,则 BBB 在被追上之前进入环内,且要保证环节点数大于 333(因为每一轮 AAA 先行动)。以 A,BA,BA,B 为起点 BFSBFSBFS,若 BBB 最终被追上,则 BBB 前往任何一个满足 disA[i]<=disB[i]+1disA[i]<=d

2020-09-16 19:50:52 100

原创 HDU 2457 AC 自动机 + DP

题意传送门 HDU 2457题解初始化 ACACAC 自动机,将 TrieTrieTrie 上节点看做字符串后缀的不同模式(或者状态)。若一个模式存在目标基因,那么这个节点或其失配节点(最长前缀)对应的字符串是目标基因。计算失配指针的时候,处理了各节点的所有状态转移(即在字符串结尾添加 A,C,G,TA,C,G,TA,C,G,T 其中一个字符),同时标记各状态是否存在目标基因即可。dp[i+1][j]dp[i+1][j]dp[i+1][j] 代表字符串在区间 [0,i][0,i][0,i] 且后缀模

2020-09-14 22:43:59 139

原创 POJ 2778 AC 自动机 + 矩阵快速幂

题意传送门 POJ 2778题解初始化 ACACAC 自动机,将 TrieTrieTrie 树上节点看做字符串的状态(字符串后缀模式),显然各节点有 A,C,G,TA,C,G,TA,C,G,T 四种状态可以转移(对应了 DNADNADNA 序列在末尾添加一个字符),且转移后节点依然在 TrieTrieTrie 树上。判断一个状态是否具有疾病基因,只要判断对应节点或节点的失配节点(即其后缀)是否对应了疾病基因即可。构造矩阵,维度为 TrieTrieTrie 节点数,即字符串可能的状态数,mat[i]

2020-09-14 21:30:28 63

原创 HDU 2896 AC 自动机

题意传送门 HDU 2896题解ACACAC 自动机的节点记录特征码的编号,查询时统计即可,注意字符集为 ASCⅡ。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <queue>using namespace std;#define maxn 505#define base 128#define maxl 1000

2020-09-14 19:28:55 86

原创 HDU 2222 AC 自动机

题意传送门 HDU 2222题解多模式匹配,裸的 ACACAC 自动机。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <queue>using namespace std;#define maxn 10000#define maxl 1000005struct node{ int cnt, a[26];

2020-09-14 18:22:41 117

原创 LCP 20 DFS

题意传送门 LCP 20. 快速公交 题解前向 DFSDFSDFS 状态数显然过多;考虑后向 DFSDFSDFS,从终点搜索至起点。对于某个位置 xxx,有 333 种可能的花费最小的方式到达:直接从起点移动至 xxx;从 x/jump[i]x/jump[i]x/jump[i] 位置做公交至 x/jump[i]×jump[i]x/jump[i]\times jump[i]x/jump[i]×jump[i] 再向前动至 xxx;从 x/jump[i]+1x/jump[i]+1x/jump[i]+1 位置

2020-09-14 16:05:53 68

原创 HDU 5112 暴力

题意传送门 HDU 5112题解按时间排序,顺序计算节点间速度,更新答案即可。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;#define maxn 1000005struct p{ int t, x;} ps[maxn];bool cmp(const p &a, const p &

2020-09-13 22:07:59 46

原创 POJ 2513 Trie + 并查集 + 欧拉通路

题意传送门 POJ 2513题解求一条由棍子为边组成的欧拉通路或欧拉回路。无向图的欧拉通路判断条件为:图连通且仅存在 222 个度为奇数的节点;欧拉回路判断条件为:图连通其节点度都为偶数。TrieTrieTrie 树将代表颜色的字符串映射为索引值,用并查集判断图的连通性即可。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespac

2020-09-13 21:19:14 64

原创 POJ 3764 Trie + 贪心

题意传送门 POJ 3764题解考虑异或最长路径经过节点 iii,以 iii 为起点 dfsdfsdfs,求至多两条以不同节点为终点的路径(考虑权值为零的路径)的异或最大值即可;若异或最长路径不经过节点 iii,设其为 pathjkpath_{jk}pathjk​,考虑异或的性质 x⊕x=0x\oplus x=0x⊕x=0,则 pathijpath_{ij}pathij​ 与 pathikpath_{ik}pathik​ 的公共路径异或值为零,pathij⊕pathik=pathijpath_{ij}

2020-09-13 19:51:02 94

原创 POJ 3122 二分

题意传送门 POJ 3122题解二分答案,统计各块派最多可以切分出的整数的块即可。#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>using namespace std;#define eps 1e-6#define maxn 10005const double pi = acos(-1.0);int t, n, f, r[maxn];dou

2020-09-13 14:41:56 86

原创 LeeCode 1521 位运算

题意传送门 LeeCode 1521. 找到最接近目标值的函数值题解前缀的与运算结果随着前缀长度的增加非严格递减。对于以某个数为右界的前缀与运算,其结果的种数不会超过这个数的二进制表示 111 的数量加一。那么依次维护前缀与运算的结果,依次右移前缀的右界,更新答案即可。class Solution{public: int closestToTarget(vector<int> &arr, int target) { int res = INT_

2020-09-12 23:55:14 104

原创 LeeCode 1520 贪心

题意传送门 LeeCode 1520. 最多的不重叠子字符串题解记录各个字符在字符串中出现的第一次与最后一次的位置,考虑到在字符串中出现的字符必须全部在这个子串中,对于每一个字符,考虑以其第一次出现位置为左界的满足条件的区间。问题转化为且不重叠的最大区间数量。贪心地选取可以不重叠的且右界最下的区间即可。class Solution{#define base 26typedef pair<int, int> P;public: int l[base], r[base];

2020-09-12 23:22:21 101

原创 LCP 19 DP

题意传送门 LCP 19题解dp[i][j]dp[i][j]dp[i][j] 代表字符串分别为连续的 ′r′(j=0)'r'(j=0)′r′(j=0),连续的 ′ry′(j=1)'ry'(j=1)′ry′(j=1),以及连续的 ′ryr′(j=2)'ryr'(j=2)′ryr′(j=2) 所需的最小调整次数{dp[i][0]=dp[i−1][0]+(str[i]==′r′?0:1)dp[i][1]=min(dp[i−1][1],dp[i−1][0])+(str[i]==′y′?0:1)dp[i][2

2020-09-12 22:13:33 66

原创 NC 14694 KMP

题意传送门 NC 14694题解将不同数列元素分别写至等式两端,则有 (a2−a1)%k=(b1−b2)%k(a_{2}-a_{1})\%k=(b_{1}-b_{2})\%k(a2​−a1​)%k=(b1​−b2​)%k,差分取模后,转化为单串匹配问题,KMPKMPKMP 求解即可。#include <bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define maxn 200005int t, n, m, k,

2020-09-11 23:36:24 75

原创 NC 14699 枚举 + DP

题意传送门 NC14699题解设获得最大 ATKATKATK 的配置中,从者数量为 n1n1n1,装备数量为 n2n2n2,则问题为满足 0≤n2≤n1≤50\leq n2\leq n1\leq 50≤n2≤n1≤5 的条件下,∑从者ai+∑装备ai′\sum_{从者} a_{i}+\sum_{装备} a_{i'}∑从者​ai​+∑装备​ai′​ 的最大值。如果已知选择 jjj 个从者或装备,花费不大于 kkk 时,能够获得的最大 ATKATKATK 值,那么枚举从者、装备的数量以及花费,跟新答案即

2020-09-11 21:27:32 62

原创 NC 14294 DP

题意传送门 NC 14294题解dp[i][j][k]dp[i][j][k]dp[i][j][k] 代表在 9(i,j)9(i,j)9(i,j)

2020-09-11 20:02:07 75

原创 LeeCode 216 枚举子集

题意传送门 LeeCode 216. 组合总和 III题解按字典序升序枚举大小为 kkk 的子集,判断是否满足条件即可。class Solution{#define base 9public: int nxt(int i) { int x = i & -i, y = i + x; return ((i & ~y) / x >> 1) | y; } vector<vector<int>&

2020-09-11 08:25:36 98

空空如也

空空如也

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

TA关注的人

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