随笔分类 - 常用技巧
摘要:贪心 A Nicholas and Permutation 模拟+DFSB Pyramid of Glasses 设酒杯满了值为1.0,每一次暴力传递下去 尺取法(two points) C Vasya and String 从左到右维护一段连续的区间,改变次数不大于k,取最大值. BFS(方向,旋
阅读全文
摘要:最短路+拆点 A As long as Binbin loves Sangsang 题意:从1走到n,每次都是LOVE,问到n时路径是连续多个"LOVE"的最短距离.秀恩爱不想吐槽. 分析:在普通的最短路上有寻路的限制,把一个点看成4个点,表示通过某一个字符到该点的最短距离.注意自环的处理,还有距离
阅读全文
摘要:DP+单调队列优化 E One hundred layer 题意:n*m的矩形,从第一层x位置往下走,每一层都可以往左或往右移动最多k步再往下走,问走到n层时所走路径的最大值. 分析:定义,,注意到max里的东西与j无关,可以定义单调队列维护的最值,注意t的约束条件.往右的情况类似.
阅读全文
摘要:题意:有n个点,问其中某一对点的距离最小是多少 分析:分治法解决问题:先按照x坐标排序,求解(left, mid)和(mid+1, right)范围的最小值,然后类似区间合并,分离mid左右的点也求最小值 POJ 3714 HDOJ 1007
阅读全文
摘要:DFS A - Joysticks 嫌麻烦直接DFS暴搜吧,有坑点是当前电量<=1就不能再掉电,直接结束。 构造 + 贪心 B - Beautiful Paintings 每次取出不重复的递增序列,直到集合为空 数学 + 容斥 C - Watchmen 化简公式得到找到pair (i, j) xi
阅读全文
摘要:水 A - Two Bases 水题,但是pow的精度不高,应该是转换成long long精度丢失了干脆直接double就可以了。被hack掉了。用long long能存的下 #include <bits/stdc++.h> using namespace std; typedef long lon
阅读全文
摘要:题目传送门题意:问最长子序列,满足区间最大值 - 最小值在[m, k]之间分析:用双端队列维护最大值和最小值,保存的是位置。当满足条件时,更新最大值。/************************************************* Author :Running_T...
阅读全文
摘要:水 A - Kefa and First Steps /************************************************ * Author :Running_Time * Created Time :2015/9/23 星期三 00:19:33 * File Name
阅读全文
摘要:一. 区间最大最小值问题 1. RMQint mx[N][20]; //最多能保存524288的长度int RMQ(int l, int r) { int k = 0; while (1> 1; build (lson); bu...
阅读全文
摘要:数学A - Raising Bacteria分析:如果1 #include #include #include #include #include #include #include #include #include #include #include #include #include #inc...
阅读全文
摘要:题目传送门题意:给你一棵树,树上的每个节点都有树值,给m个查询,问以每个点u为根的子树下有多少种权值恰好出现k次。分析:首先要对权值离散化,然后要将树形转换为线形,配上图:。然后按照右端点从小到大排序,离线操作:将每一个深度的权值分组到相同权值的cnt中,当sz == k时,用树状数组更新+1,表示...
阅读全文
摘要:题目传送门题意:5个集合,每个集合最多200个数字,问是否每个集合挑一个数加起来和为0。分析:显然n^5的程序果断超时,甚至n^3logn的二分也过不了。想n^3的方法,既然判断有没有,那么可以将两个两个的集合合并成两个大集合,再枚举最后一个集合,两个大集合排完序之后一个指针从开头最小开始,另一个从...
阅读全文
摘要:题目传送门题意:给出一些花开花落的时间,问某个时间花开的有几朵分析:这题有好几种做法,正解应该是离散化坐标后用线段树成端更新和单点询问。还有排序后二分查找询问点之前总花开数和总花凋谢数,作差是当前花开的数量,放张图易理解:还有一种做法用尺取法的思想,对暴力方法优化,对询问点排序后再扫描一遍,花开+1...
阅读全文
摘要:题目传送门题意:给一些坐标轴上的点,选一个点,使得其他点到该点曼哈顿距离和最小分析:这题有很强的技巧性,直接计算每个点的曼哈顿距离和是不可行的。这里用到了前缀的思想,先对点按照x从左到右排序,p[i].sum保存选择i点时曼哈顿距离和是多少,p[i].sum = (i - 1) * p[i].x -...
阅读全文
摘要:题目传送门 题意:求MCS(最大连续子序列和)及两个端点分析:第一种办法:dp[i] = max (dp[i-1] + a[i], a[i]) 可以不开数组,用一个sum表示前i个数字的MCS,其实是一样的。。。类似DP的做法有个名字叫联机算法。 第二种办法:一个前缀记录前i个数字的和,那么an...
阅读全文
摘要:题目传送门 1 /* 2 Rabin_Karp:虽说用KMP更好,但是RK算法好理解。简单说一下RK算法的原理:首先把模式串的哈希值算出来, 3 在文本串里不断更新模式串的长度的哈希值,若相等,则找到了,否则整个模式串的长度的哈希值向右移动一位 4 */ 5 /*********...
阅读全文
摘要:题目传送门 1 /* 2 hash+set:首先把各个字符串的哈希值保存在set容器里,然后对于查询的每一个字符串的每一位进行枚举 3 用set的find函数查找是否存在替换后的字符串,理解后并不难。另外,我想用64位的自然溢出wa了,不清楚 4 */ 5 /********...
阅读全文
摘要:题目传送门 1 /* 2 题意:问有几个区间最大值-最小值 8 #include 9 #include 10 #include 11 using namespace std;12 13 typedef long long ll;14 const int MAXN = 1e5 + 10;1...
阅读全文
摘要:题目传送门 1 /* 2 题意:问一个点到另一个点的最少转向次数。 3 坐标离散化+BFS:因为数据很大,先对坐标离散化后,三维(有方向的)BFS 4 关键理解坐标离散化,BFS部分可参考HDOJ_1728 5 */ 6 #include 7 #inc...
阅读全文
摘要:题目传送门 题意:问区间内x的出现的次数分析:莫队算法:用一个cnt记录x的次数就可以了。还有二分查找的方法代码:#include #include #include #include using namespace std;const int MAXN = 1e5 + 10;const int I...
阅读全文