各种思维题
文章平均质量分 74
WA是一笔财富
这个作者很懒,什么都没留下…
展开
-
HDU 5961传递 思维 + bitset
传送门:HDU 5961题意:中文题思路:这题如果按hdu上的6s时限的话就有很多做法了,从每个点开始bfs判断是否有长度大于等于2的最短路径,或者dfs判断给出的图中是否有三元环等等,但是据说现场赛是1500ms时限,那这些做法就都不行了。能在现场赛实现下通过的一个方法是用bitset将每个点的出边保存下来,然后枚举每一条边,判断该边的两个端点的出边是否都为下图的情况即判断是原创 2017-10-17 15:39:43 · 440 阅读 · 0 评论 -
HDU - 5037 Frog 贪心(思维好题)
传送门:HDU 5037题意:有一条小河长为M的小河,小河里存在N个石头,有一个每次能跳L米的小青蛙,随意添加石头保证青蛙能从头跳到尾的前提下,问青蛙使用最优策略跳到对岸最多需要多少次。思路:我们要使青蛙跳的次数最多,那么必然要每L + 1的距离尽量使得青蛙跳两次,因此若连续一个或多个L + 1的距离没有石头,那么我们就可以让青蛙每L + 1跳两次,若有原有的石头,我们加石头时就要保证每两原创 2017-09-20 14:11:55 · 419 阅读 · 0 评论 -
HDU 5821 Ball 贪心
传送门:HDU5821题意:有N个盒子,每个盒子最多装一个球. 球的颜色不一定相同.现在要进行m次区间操作:每次操作将[l, r]区间内的球拿出来后,再随意将区间内的球重新分配回去.问经过上述操作后是否有可能达到给定的状态.思路:先贪心的给每个球在b数组中找个位置,然后每次选一个区间就相当于对这个区间排序,使得每个球朝其位置方向去,最后判断一下是不是每个球都在目标位置上就行了。原创 2017-09-12 00:24:46 · 228 阅读 · 0 评论 -
HDU - 5726 GCD 数学 + 思维
传送门:HDU 5726题意:给定一段长度为n的序列和m个询问,每次询问l,r区间的gcd是多少,和区间l,r的gcd相同的区间有多少个。思路:HDU5869简化版,详见 点击打开链接代码:#include#define ll long long#define pb push_back#define MAXN 100010#define inf 0x3f3f3f3fusi原创 2017-09-19 00:22:46 · 459 阅读 · 0 评论 -
HDU 6215 Brute Force Sorting 链表 + 队列(模拟)
传送门:HDU 6215题意:有长度为n的序列,定义若某个元素a[i]为‘顺序’则必须满足 a[i - 1] a[1] 思路:分析易知连续的降序序列为乱序,那么我们可以链表 + 队列模拟,链表中每次删除连续的降序序列,队列里保存有可能成为新降序序列的开头结点的位置。玄学时间复杂度,个人认为是数据水。代码:#include#define ll long long#defi原创 2017-09-17 20:35:19 · 470 阅读 · 0 评论 -
HDU - 5452 Minimum Cut LCA + imos和
传送门:HDU5452题意:给出一个无向图G,求图G的最小边割集,并且使得割边中有且仅有一条属于图G的生成树T。思路:考虑生成树中的每一条边i,将其去掉后生成树就被划分成两部分,则全图的割边就是那些跨越这两部分的边,将这些割边的数量记录为ans[i],但是求ans[]的过程显然不能暴力,考虑每条不在生成树中的边对答案的贡献,设其端点为u,v,则u -> v路径上所有边对应的ans[i]都应原创 2017-09-09 00:47:57 · 390 阅读 · 2 评论 -
HDU - 5812 Distance 数学 + 思维
传送门:HDU 5812题意:给出一个空集合和三个操作。操作I向集合中插入元素X,操作D删除集合中的元素X,操作Q,查询集合中的所有元素与X的最小距离是多少? 定义最小距离 d(x,y) 为从x变为y只通过乘或者除素数所需要的最少操作次数。例如:d(15,50)=3,因为 15/3×2×5=50思路:首先解题的关键是要知道: d(x,y)=f(x/gcd(x,y))+f(y/gcd(x原创 2017-09-16 21:50:15 · 296 阅读 · 0 评论 -
HDU - 5802 Windows 10 dfs + 贪心
传送门:HDU 5802题意:调节音量p到q,上升音量每秒只能上升1,下降音量每秒为2*x,x为上一秒下降的音量,如果下降时休息或者上升音量则下一次下降音量时只能下降1,音量最低为0,问最少需要多长时间。思路:搜索过程中记录操作次数,停顿次数,连续下降的过程不采用搜索而是直接求得,因为我们连续下降的话要么是降到第一次比q低,要么在第一次比q低的前一次停下,这个过程是完全可以直接求出来的,那原创 2017-09-15 14:35:41 · 247 阅读 · 0 评论 -
51nod 1821 最优集合 并查集 || 栈
传送门:51nod 1821题意:中文题。思路:要做这题需要知道一个前提:假设目前集合优美值为now,那么加入一个x(x剩下的就是贪心从b集合里取尽量大的k个数了,每次a集合中的数无法使now继续增大时,就从b集合中取一个尽量大的数,因为每个数只能取一次,取走就相当于没了,因此我们可以用并查集维护下标之间的相邻关系,这也算是经典运用了吧。另外还可以用栈处理贪心的过程:维护一个栈,将原创 2017-08-23 21:13:22 · 227 阅读 · 0 评论 -
HDU - 5773 The All-purpose Zero LIS变形
传送门:HDU5773题意:给定一个序列,可以将0替换成任意数,在此基础上求最长递增子序列(严格递增)。思路:最优情况肯定是用掉所有的0,因为无论是用0去替换值还是用0去增长递增序列,都不会使得情况更差。知道了这一点,我们可以先把所有的0提出来,那么剩下的数应该对应减去其前面0的个数,这样做出来最长递增子序列以后,再把数减少的值加回去,所有0重新插进去(替换成相应的数),就会是满足题意原创 2017-09-03 21:18:08 · 175 阅读 · 0 评论 -
HDU 5952 Counting Cliques dfs + 思维
传送门:HDU5952题意:给出一个无向图,问其中点集大小为S的无向完全子图的个数。思路:就是暴搜,但是建图有技巧,因为搜索过程中很容易出现重复序列,比如我们第一次搜到的答案是1 2 3,下一次搜到的是1 3 2,这两个实际上是同一种子图,搜索这些无用状态既浪费时间,去重还很麻烦。技巧就是建图的时候建成有向图,只让标号小的顶点指向标号大的顶点,这样搜出来的序列一定是一个 v1 代码:原创 2017-08-06 21:25:59 · 278 阅读 · 0 评论 -
HDU 6052 To my boyfriend 思维 + 枚举(计数)
传送门:HDU6052题意:给出一个n*m的矩阵,每个点有一种颜色,定义矩阵的val为矩阵中不同颜色的数量,问任意一个子矩阵的val的期望为多少。思路:我是直接看了一篇讲解的想不理解都难的博客:点击打开链接代码:#include#define ll long long#define pb push_back#define fi first#define se sec原创 2017-07-28 23:04:27 · 1011 阅读 · 0 评论 -
HDU - 5033 Building 单调栈(好题)
传送门:HDU 5033题意:有一排建筑物坐落在一条直线上,每个建筑物都有一定的高度,给出一个X坐标,高度为0,问X位置能看到的视角是多少度,保证X左右有建筑物。思路:很容易想到用单调栈单调队列什么的去维护,但就是想不出来该怎么维护。。其实我们应该维护一个相邻两顶点间斜率绝对值单调递增的栈,套路还是单调栈的套路,不过是进出栈的条件变成了斜率的相对大小,然后就是把询问也当建筑物放进去会使原创 2017-09-20 20:02:31 · 377 阅读 · 0 评论 -
CodeForces - 859C Pie Rules DP(逆推)(思维好题)
传送门:Codeforces 859c题意:有n个物品,每个物品有不同的价值,物品按顺序分给两个人,有一块令牌,每回合拥有令牌的人拥有物品的分配权,但是该回合未获得物品的那个人会在下回合获得令牌,开始令牌在Bob手里,两个人都采取最优的策略,问最后各能获得的最大价值是多少。思路:考虑dp求解,要明确dp的状态只与是否有令牌有关,而与令牌在谁手里无关,因为不论令牌在谁手里,那个人都会尽可能的原创 2017-09-20 23:20:35 · 2603 阅读 · 0 评论 -
Codeforces 868 D. Huge Strings 字符串思维乱搞
传送门:Codeforces 868 D题意:有n个01字符串,第i个操作是用第l个和第r个拼成第n + i个字符串,然后询问最大的k使得所有长度为k的01串都在这个串中出现过。思路:emmm,借鉴了杜瑜皓大佬的思路和代码风格,这题解法很多,前提是要知道一点:k的范围不会很大,甚至不会超过10。知道了答案范围这么小以后基本就可以瞎搞了,暴力,搜索,二分,STL什么的都能上。大佬的思路是原创 2017-10-07 19:41:40 · 575 阅读 · 0 评论 -
HDU - 5963 朋友 思维 + 博弈
题意:中文题。思路:考虑和根相连的一条树链,如果这条树链上和根相连的那条边权值为1,那么最终在该链上的操作次数要为奇数次才能使得和根相连的边的权值变为0(因为不论选择该条树链上哪个点,此边的权值总会翻转),同理可得和根相连的边若初始权值为0要操作偶数次。而无论两个人怎么操作,都不会改变这些根的直连边变0所需操作次数的奇偶性,而若总操作次数为奇数次的话那就必定是先手胜了,因此我们只需维护一个每个原创 2017-10-16 23:50:46 · 305 阅读 · 0 评论 -
HDU - 5573 Binary Tree 构造
题意:给出一颗二叉树,根节点为1,子节点为父节点的2倍和2倍+1,从根节点开始依次向下走k层,问如何走能使得将路径上的数进行加减最终结果得到n。思路:来自:点击打开链接做题一定要注意数据范围! n 是真的没想到利用差值去搞事情。。代码:#include#define ll long longusing namespace std;int main(){ int原创 2017-10-14 18:44:59 · 209 阅读 · 0 评论 -
HDU - 5009 Paint Pearls dp + 链表 + 下界优化
传送门:HDU 5009题意:给出n个连续的珠子,珠子有不同的颜色,现将其划分成任意多段,每一段的代价为该段中颜色种数的平方,问划分的最小总代价和是多少。总思路:dp[i]代表处理到第i个珠子的最小花费,显然dp[i] = min(dp[j] + num[i][j] * num[i][j])(0 优化方法1:用双向链表维护珠子的颜色,使得任意时刻已经遍历过的珠子中每种颜色都只保存一个最原创 2017-10-13 12:02:43 · 204 阅读 · 0 评论 -
CodeForces - 867E Buy Low Sell High 贪心 + 优先队列
传送门:CodeForces - 867E题意:有一个物品,在n天内有不同的价格,每天可以选择买入或者卖出该物品,而且只能操作一次,初始手上没有该物品,问能获得的最大利益是多少。思路:题目都告诉你了,我们肯定是要贪心的低买高卖,考虑用优先队列(小顶堆)维护这一过程,我们每次得到一个新的价格,将其和堆顶的价格比较,如果比堆顶的价格低,就直接放入堆中,如果比堆顶的价格高,就意味着我们可以提前以原创 2017-10-12 15:38:51 · 756 阅读 · 0 评论 -
HDU - 5029 Relief grain 树链剖分 + 线段树好题
题意:给出一棵n个节点的树,和m次操作。 操作a,b,k相当于将树上a,b结点间的路径上的节点都加上一个type k,最后输出每个结点被加最多次的那个type, 若有多个type被加的次数相同,输出编号最小的type。思路:显然要先树链剖分将树上操作变成线性序列的操作,emmm,然后我就不会了。。正解:树链剖分后考虑如何维护更新操作,对于一个操作a,b,k,我们可以在pos[a]位置打上一原创 2017-10-11 22:50:04 · 290 阅读 · 0 评论 -
CodeForces - 862E Mahmoud and Ehab and the function 二分(思维题)
传送门:Codeforces 862E题意:给出长为n的a序列和长为m的b序列,求.的最小值,其中0 还有q次操作,每次操作将a[l..r]区间内的数 + x, 每次操作后求一次f(j)的最小值思路:容易得到无论a序列的数怎么变化,每个位置上的数的加减性质是不会变的,即奇数位置上的数一直是加,偶数位置上的减,因此我们将f(j)的值拆成a序列的贡献和b序列的贡献两部分,无论j怎么原创 2017-10-03 22:12:35 · 257 阅读 · 0 评论 -
HDU - 4424 Conquer a New Region 并查集好题
题意:给定N个点的树。定义d(u,v)为路径u到v的容量,其值为路径上最小的边权。求一个点作为root,使得其他所有点到该点的容量和最小,求最小值。思路:考虑边权最小的边e,则root一定在其左子树或者右子树上,假设在左子树上,那么e的贡献就是w[e] * sz[rchild] + ans[lchild],然后将最小边去掉,树就被分成了两部分,每一部分都会有一个最小边,这样分治下去就能求出原创 2017-10-02 20:37:18 · 304 阅读 · 4 评论 -
HDU - 4803 Poor Warehouse Keeper 贪心 + 思维
题意:给出两种操作:如果按下按钮1,会使数量+1,总价对应增长单价数目(因此按下按钮1不会改变单价)如果按下按钮2,会使总价加1,数量不变(按下按钮2会使单价增加)现在问至少多少步可以使得 按钮1数字为x, 按钮2数字为y;原创 2017-10-01 22:04:05 · 226 阅读 · 0 评论 -
CodeForces - 859E Desk Disorder 思维 + 并查集判环
传送门:Codeforces 859E题意:有N个人和2N个座位。告诉你这N个人它们现在的座位。以及它们想去的座位。每个人可以去它们想去的座位或者就坐在原来的座位上。新的座位安排和旧的座位安排,都不允许一个座位被两个人占据的情况。问你新的座位安排的方案数。思路:将整个关系看成一张图,某个人现在的座位以及他想去的座位之间有一条有向边,那么我们可以分析的出这图的几个基本性质:1原创 2017-09-22 12:25:15 · 479 阅读 · 0 评论 -
2015-2016 Northwestern European Regional Contest (NWERC 2015) 补题
C.Cleaning Pipes题意:给出n条管道(线段),任意两个管道之间之多有一个交点,忽略一个管道头部和其他管道的交点,问能否选出一个不相交的管道集合来使得所有交点都被这些管道覆盖。思路:将管道抽象成点,两个管道的交点抽象成边,那么问题转化成判断新建的图是否是一个二分图。判断二分图最常用的方法就是染色法,本题当然也就可以用,然而我看dalao的代码还学了另一种方法:利用并查集判断原创 2017-10-08 23:12:37 · 387 阅读 · 0 评论 -
UVALive - 7139 Rotation 矩阵前缀和(imos和)
传送门:UVALive 7139题意:N*M的网格,一辆车沿着网格线按给定路线走,每个网格里有一个人,人的视线始终看着车,问这些人净转圈数的平方和。思路:因为起点和终点都是左上角,因此我们可以维护每一个格子左边部分的上下经过次数差,这也就是该格子的净转圈数,维护这个经过次数的时候可以用差分的思想(类似树状数组区间更新点查询),然后最后再求一个矩阵前缀和就是每个点真正的值了。代码:#原创 2017-10-08 00:20:21 · 319 阅读 · 0 评论 -
HDU 6150 Vertex Cover 构造
传送门:HDU6150以上来自:点击打开链接想了很久都不明白贪心的做法为什么一定把右边的当做解,重新看了一眼题,发现if (deg[i] >= mx) { mx = deg[i]; u = i; }注意是>=,也就是说,度数相等的情况下选择较大的编号,而我们构造的图中右边的编号又一定大于左边的。。这样做原创 2017-08-20 18:39:36 · 270 阅读 · 0 评论 -
CodeForces - 841D Leha and another game about graph 构造(dfs + 思维)
传送门:Codeforces 841D题意:给出一个连通图,并给每个点赋一个d值0或1或-1,要求选出一个边的集合,使得所有的点i要么d[i] == -1,要么dgree[i] % 2 == d[i],dgree[i]代表i结点的度数。思路:首先我们考虑一条边都不选的情况,此时所有d[i] == 0的i都满足了题目要求,此时如果有d[i] == 1的点,我们就要加一条边,我们考虑用df原创 2017-08-20 21:48:48 · 1072 阅读 · 0 评论 -
HDU 6071 Lazy Running 同余 + 最短路
传送门:HDU6071题意:给你一个由四个节点组成的环,相邻两点间可达,求从节点2出发,回到节点2的不小于k的最短路径的长度。思路:先摆上官方题解:取w=\min(d_{1,2},d_{2,3})w=min(d1,2,d2,3),那么对于每一种方案,均可以通过往返跑ww这条边使得距离增加2w2w。也就是说,如果存在距离为kk的方案,那么必然存在距离为原创 2017-08-05 15:59:40 · 746 阅读 · 0 评论 -
HDU 4886 TIANKENG’s restaurant(Ⅱ) 思维+字符串哈希
传送门:HDU4886题意:给定字符串,问字符串的子串中没出现过的最短且字典序最小的串是哪个(只能由A-H组成)。思路:首先要能想到没出现过的串最长可能是多长,这里我们取6或者7都行,因为假如说长度与为6的话,字符串有8^6=262144中情况,如果要这些串都出现的话总串大约就要1500000长度(实际长度肯定比这个少,因为会有首尾重叠的情况,但是就本题而言,可能没有极限数据,长度为6足够原创 2017-06-10 12:48:15 · 308 阅读 · 0 评论 -
HDU 4908 BestCoder Sequence 思维
传送门:HDU4908题意:给定1-n的一个全排列,问有多少个子串的长度为奇数并且中位数是m。思路:很简单的两种思路我一种也没想到。。1.先找到m的位置,然后向一边扩展,令t=0,遇到大于m的数就+1,小于m的数就-1,记录每种t出现的次数,然后向另一边扩展,令x=0,进行同样的操作,不过这次在x更新之后就判断另一半有没有x+t==0的t存在,有就将答案加上对应的个数。x+t==0代表原创 2017-06-09 21:54:38 · 265 阅读 · 0 评论 -
2017浙工大之江学院校赛 C 组合数学+思维
Problem C: 勤劳的ACgirlsTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 105 Solved: 43[Submit][Status][Web Board]Descriptionzjc的ACgirls队的队员最近比较忙,为了能够取得更好的比赛成绩,他们制定了一个m天a掉n题的计划,a掉一题可以是这m天的原创 2017-06-03 14:09:33 · 1025 阅读 · 0 评论 -
2017浙工大之江学院校赛K-数学
%lld 参赛请加qq群160384471获取最新消息Problem K: qwb与小数Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 310 Solved: 45[Submit][Status][Web Board]Descriptionqwb遇到了一个问题:将分数a/b化为小数后,小数点后第n位原创 2017-06-02 13:16:16 · 318 阅读 · 0 评论 -
2017浙工大之江学院校赛 L 数学+离线处理
Problem L: qwb与整数对Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 208 Solved: 31[Submit][Status][Web Board]Descriptionqwb又遇到了一道数学难题,你能帮助他吗?给出两个整数n和m,请统计满足0<a<b<n并且使得 (a2+b2+m)/(a原创 2017-06-06 12:52:25 · 352 阅读 · 0 评论 -
codeforces 810C Do you want a date? 思维
传送门:codeforces 810C题意:给定一个集合,包含这n个整数,让你求出这个集合的所有子集a的F(a)和,这里的F(a)=集合a中最大和最小元素的差。思路:第一眼肯定想到sort后暴力枚举两个端点,然而这并不现实,然后我就没思路了。。正解1:戳这里正解2:其实完全可以不用枚举端点,稍稍转化一下思维,当某个数做端点的时候它一定是被加到或者从总和中减去,这样我们可以尝试是否可原创 2017-05-31 00:15:47 · 271 阅读 · 0 评论 -
Number of Parallelograms CodeForces 660D 思维题
传送门:CodeForces 660D题意:给定N个点,问这N个点能组成多少个平行四边形。思路:根据数据量判断显然我们不能枚举四个点判断是否为平行四边形,注意到关键信息--任意三点不共线,我们可以考虑枚举平行四边形对角线的中点,如果两条线段的中点重合,那么这两条线段的端点一定能组成一个平行四边形。代码:#include#define ll long long#define p原创 2017-05-30 22:21:25 · 216 阅读 · 0 评论 -
New Skateboard CodeForces - 628B 思维
传送门:CodeForces - 628B 题意:问给定的大数串中有多少个子串是4的倍数(可含前导零)。思路:想暴力都不知道该怎么写。。正解:因为100是4的倍数,所以我们只检查每相邻两位就好了。。看哭了。。代码:#includeusing namespace std;string s;int main(){ cin>>s; int sz=s.size(); lo原创 2017-05-24 22:00:26 · 272 阅读 · 0 评论 -
The Smallest String Concatenation CodeForces - 632C 思维
传送门:CodeForces - 632C题意:给出N个字符串,问这N个字符串可以组成的字典序最小的字符串是什么。思路:乱搞怎么都不对,看了题解也不明白为什么。。正解:保证相邻的两个串连接起来是字典序最小的,那么拼接起来的总串就是字典序最小的(然而并不明白是为什么)。代码:#includeusing namespace std;string s[100010];bool原创 2017-05-24 21:54:50 · 412 阅读 · 0 评论 -
Longest Subsequence CodeForces - 632D 思维
传送门:CodeForces - 632D题意:给定一个序列,求一个最长的子序列满足子序列中所有元素的lcm不大于m。思路:一点思路也没有。。正解:因为m很小,我们可以枚举因子,看看每个数的因子有在序列中多少个,这样因子最多的那个数一定就是要求的lcm。代码:#include#define ll long long#define pi acos(-1)#define in原创 2017-05-24 21:48:57 · 300 阅读 · 0 评论 -
Molly's Chemicals CodeForces - 776C
传送门:CodeForces - 776C 题意:给定n个数,问和等于k的次方的连续区间有多少个。思路:思维题,假设前缀和数组为sum[],则有sum[i]-sum[j]==power(k)(j原创 2017-04-22 11:02:15 · 318 阅读 · 0 评论