算法竞赛
文章平均质量分 63
ACM 相关
总想玩世不恭
这个作者很懒,什么都没留下…
展开
-
数组第 k 大子序列
给你一个整数数组 nums(有正有负)和一个正整数 k。你可以选择数组的任一 子序列 并且对其全部元素求和。数组的 第 k 大和 定义为:可以获得的第 k 个 最大 子序列和(子序列和允许出现重复)返回数组的 第 k 大和。原创 2022-08-25 09:47:09 · 354 阅读 · 0 评论 -
POJ3259 再探虫洞穿越
每日打卡(2/2)传送门:点击打开链接题目大意: 有些路,需要一些时间去走(双向),还有一些虫洞,可以回到过去(单向),求可不可以经过若干操作,回到过去的原点。思路: 这次用Floyd做,刚开始数组开大了,居然TLE了??? 这次做时经过思考,并不用将map[i][i] 值设为0,这是没有意义,全部初始化为0x3f3f3f即可。在每次的循环中,我们如果发现存在map[i][i]&...原创 2018-03-05 22:35:11 · 190 阅读 · 0 评论 -
hdu1069 最长下降子序列
每日打卡(1/1)传送门:点击打开链接题目大意: 就是叠长方体,每种有无数多个,但是一个只能叠在另一个长和宽都比它大的长方体上面。思路: 假设一个长方体长宽高都不同,那么它就可以以6个不同的姿势摆放,所以添加到vector的时候需要添加6个,然后就用动态规划即可。#include<iostream>#include<cstdio>#include<al...原创 2018-03-26 21:42:12 · 137 阅读 · 0 评论 -
POJ3159 Candies(差分约束)
每日打卡(1/1)传送门:点击打开链接题目大意: n个人,m钟比较,每行的信息是3个数字,A,B,C,表示B比A多出来的糖果不超过C个,问你,n号人最多比1号人多几个糖果题目思路: 可以观察以下三角不等式: B-A>x C-B>y C-A>z 那么,C-A的最大值就是min(z,x+y),刚开始我认为最大值应该是x+y,仔细思考后发现,由于第三...原创 2018-03-08 19:26:49 · 129 阅读 · 0 评论 -
蓝桥杯历届试题T 斐波那契(待更新,40分解法)
每日打卡(1/1) 补问题描述 斐波那契数列大家都非常熟悉。它的定义是: f(x) = 1 .... (x=1,2) f(x) = f(x-1) + f(x-2) .... (x>2) 对于给定的整数 n 和 m,我们希望求出: f(1) + f(2) + ... + f(n) 的值。但这个值可能非常大,所以我们把它对 f(m) 取模。 公式如下 但这个数字依然很大,所以需要再...原创 2018-03-22 20:39:28 · 853 阅读 · 0 评论 -
POJ1511 邀请贺卡
每日打卡(1/1) (补)传送门:点击打开链接题目大意: 要求从起点到其余每个点,再从那些点回到起点,要求最小值。#include<iostream>#include<cstring>#include<cstdio>#include<vector>#include<queue>#include<string>...原创 2018-03-08 09:52:23 · 165 阅读 · 0 评论 -
hdu1560 DNA序列(IDA*)
每日打卡(1/1)传送门:点击打开链接题目大意: 如上图所示,求按照此方法拼接所有字符串,最短长度是多少。题目思路: 本题用迭代加深搜索,即IDA*。将在代码边上注释详细思路。#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#inc...原创 2018-03-12 17:03:50 · 1206 阅读 · 0 评论 -
蓝桥杯历届试题 日期问题 (set排序)
每日打卡(1/1)第七题标题:日期问题小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。 比如02/03/04,可能是2002年03月...原创 2018-03-23 19:47:13 · 254 阅读 · 0 评论 -
POJ3660 奶牛竞赛(闭包)
每日打卡(1/1)(补)传送门:点击打开链接题目大意: 共有n头奶牛,奶牛两两间比赛,问经过m轮比赛后,有多少奶牛可以确定名次。思路: 假设一个奶牛比x头奶牛厉害,比y头奶牛弱,那么如果x+y=n-1,则能确定它的名次。因此,我们用Floyd来传递闭包。#include<iostream>#include<cstdio>#include<algorit...原创 2018-03-07 10:59:49 · 280 阅读 · 0 评论 -
求m段最大子序列和
每日打卡(1/1)传送门:点击打开链接题目大意: 求m段最大子序列和题目思路: 对于前i个数分成j组,可以得到最大的子序列和可以记为dp[i][j], 那么我们对于第i个数,有两种方法: (1)直接成为当前组的最后一个,即dp[i][j] = dp[i-1][j]+a[i]; (2)或者我们新开一组,让他成为第一个,那么前i-1个数就可以分成j-1组,即dp[i][j]...原创 2018-03-26 21:36:24 · 359 阅读 · 0 评论 -
蓝桥杯历届试题b 兰顿蚂蚁(纯模拟)
每日打卡(1/1) 补问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。 平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。 蚂蚁的头部朝向为:上下左右其中一方。 蚂蚁的移动规则十分简单: 若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格; 若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。 规则虽然简单,蚂蚁的行为却十...原创 2018-03-22 20:36:58 · 207 阅读 · 0 评论 -
hdu2181 (旅行商问题)
每日打卡(1/1)传送门:点击打开链接题目大意: 遍历每个点后回到开头,求路线,全部输出题目思路: DFS即可。debug了将近一个小时,最后发现错误出在注释处。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace...原创 2018-03-10 21:58:51 · 210 阅读 · 0 评论 -
蓝桥杯历届试题 蚂蚁感冒(模拟)
每日打卡(1/1) 补 长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。输入格式 第一行输入一个整数n (1 < n &l...原创 2018-03-22 20:46:17 · 202 阅读 · 0 评论 -
NYOJ 滑雪(记忆化搜索)
每日打卡(1/1)传送门:点击打开链接题目大意: 每个数只能往四个方向走,并且要比它小题目思路: 比较典型的动态规划,写成记忆化搜索更容易理解#include<bits/stdc++.h>using namespace std;const int maxn = 105;const int INF = 0x3f3f3f;int t,n,m,a[maxn][maxn]...原创 2018-03-26 21:27:06 · 118 阅读 · 0 评论 -
蓝桥杯历届试题 包子凑数
第八题标题:包子凑数小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)...原创 2018-03-23 19:44:46 · 871 阅读 · 0 评论 -
ZOJ2477 拼魔方
每日打卡(1/2)传送门:点击打开链接题目大意: 给你一个摊开的魔方,问你是否能在五步之内复原,如果能,输出对应的步骤。题目思路: 首先需要预处理一下(打表),将各种转动模拟出来。#include<iostream>#include<cstdio> #include<cstring> #include<algorithm>us...原创 2018-03-13 12:26:40 · 364 阅读 · 0 评论 -
蓝桥杯训练第一阶段总结
每日打卡(1/1) 之前因为生病,断了很多天,从今天开始会继续每日打卡。 说说这些天的感受吧,蓝桥杯毕竟是暴力杯,这些天以题海战术为主,见了很多新题,想过两天分开几个帖子介绍。 很多习惯还是要保持的。 说点题外话吧,这周开始每周保持跑3次步(5,7,2)+踢一次球(4),身体还是很重要的。 到下个星期二为止,给自己定个小目标,线段树练2题,并查集练2题,扩展欧几里得的...原创 2018-03-21 22:03:10 · 228 阅读 · 0 评论 -
hdu3533 炮弹迷宫问题
每日打卡(1/1) (补:昨天生病了)传送门:点击打开链接题目大意: 地图上有若干门大炮,每门大炮有个朝向,隔若干时间会发射一枚炮弹,炮弹有速度,只能停在格点上。问人从起点到终点,要求不被大炮打中,可以在某点停留不动,问到终点最少要多少时间;题目思路: 由于这题数据是有一定问题的,在方向问题上面搞了很久,最后发现是题目的问题。#include<iostream>#incl...原创 2018-03-12 15:41:59 · 175 阅读 · 0 评论 -
hdu1754 单点更新+求区间最值(线段树)
与前几题不同,此题需要维护的是区间的最大值。 简单的说,单点更新时,在递归回溯的时候要push_up,更新区间的最大值。 没有懒惰标记,查询就是用ans和覆盖区间tree[x].maxn去比大小。算是线段树的裸题了。#include<iostream>#include<algorithm>#include<cstdio>#include...原创 2018-02-13 23:19:47 · 179 阅读 · 0 评论 -
POJ2777 区间更新+区间询问(线段树)
此题与前两题不同。题意是将不同区间覆盖成不同颜色,在查询区间的时候询问共有多少种不同的颜色。 大体思路是这样的: 在结构体内记录当前树的双子节点,所染的颜色color,以及flag标记。在更新时,用flag来标记当前节点是否为最新一个被更新的节点,并且更新color值。在查询或更新时,flag可以看成为懒惰标记,如果存在的话,变将color和flag标记往下传,并将当前节点...原创 2018-02-13 22:57:24 · 154 阅读 · 0 评论 -
HDOJ 1495 倒可乐(BFS)
每日打卡(1/2)传送门:点击打开链接题目大意:有一瓶可乐和两个杯子,瞎倒以后,要求平分这瓶可乐。 需要注意的是:可乐也可以放在瓶子里面喝。思路: 感觉比之前倒水的那道题目简单,但是题意有点模糊不清,没有说放在瓶子里也能喝。 主要就是一个循环6次的BFS,思路以及解法都和倒水那题差不多#include<iostream>#include<cstdio>...原创 2018-03-03 17:06:13 · 275 阅读 · 0 评论 -
hdu1968 区间更新+区间求和(线段树)
这次是把某个区间全部更新为一个值,而不是增加或减少。最后询问一下区间总和。 思路还是差不多的。在更新时,当我们将一个节点所维护的区间更新后,可以用这个区间的长度*新的值,即 tree[x].sum = (tree[x].r-tree[x].l+1)*tree[x].data。 在查询或更新区间时,可以将tree[x].data作为懒惰标记继续往下传...原创 2018-02-13 23:03:11 · 801 阅读 · 0 评论 -
POJ2387 奶牛回家(dijkstra)
每日打卡(2/2)传送门:点击打开链接题目大意: 给定起点终点,求最短路解法: 用优先队列的dijkstra。#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<queue>#include<string&...原创 2018-03-03 21:08:47 · 440 阅读 · 0 评论 -
POJ2253 跳青蛙 (dijkstra)
每日打卡(1/2)传送门:点击打开链接题目大意: 求从起点到终点的所有路线中,要使任意两点间距离尽量小,两点间距离最大的那个值。思路: dijkstra维护边中的最短路。#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<...原创 2018-03-04 13:52:17 · 165 阅读 · 0 评论 -
POJ 3268 奶牛聚会(dijkstra两次)
每日打卡(3/2)传送门:点击打开链接题目大意: 这是一张有向图,首先要从每个点到终点,然后再从终点回到原来出发的点,要使路线尽量短,求最长的路线。思路: 首先,用优先队列优化的dijkstra算法计算从每个点到终点的最短路,然后再以终点为起点,计算回到每个点的最短路。分别用两个数组来记录,最后用每两个值的和加起来,这个值即为从当前点到终点再返回所需要的最小值。#include<...原创 2018-03-04 17:13:15 · 443 阅读 · 0 评论 -
POJ3126 素数路径(BFS)
每日打卡(1/1)传送门:点击打开链接 题目大意:输入一个素数,变换到另一个素数,但期间一次只能改变一个数字,并且改变数字后的数依然是素数。题解: 主体是BFS,先用欧拉筛法把素数表打出来,然后依次修改每一位数,判断修改后的数是否为素数。#include<iostream>#include<cstdio>#include<cstring>#in...原创 2018-02-26 20:52:59 · 459 阅读 · 0 评论 -
POJ1797 拥堵交通(dijkstra)
每日打卡(2/2)传送门:点击打开链接题目大意: 与上一题相反,此题需要让从起点到终点路线中尽量让负重大,求在这种情况下最低那条边的权重。思路: 还是用dijkstra。和上题改反过来,注意初始化条件要变化。#include<cstdio>#include<iostream>#include<cstring>#include<algori...原创 2018-03-04 17:08:00 · 360 阅读 · 0 评论 -
HDU1241 求联通块个数(DFS)
每日打卡(1/1)传送门:点击打开链接题目大意: 求联通块个数思路: 把n*m的图完整遍历一遍,如果遇到一个点是@,那么就搜索当前点,将和其所有联通的点全部改为‘*’,并且总数+1,然后就求出了联通块的个数。代码:#include<iostream>#include<cstdio>#include<cstring>#include<...原创 2018-03-02 16:26:43 · 537 阅读 · 0 评论 -
最近太堕落了
最近太堕落了,我要学习。 从今天开始,每日一题(或者2个水题) 每日发博客 我要学习!原创 2018-02-21 17:20:09 · 262 阅读 · 0 评论 -
Codeforces Round466 B(暴力)
每日打卡(2/2)传送门:点击打开链接题目大意:将一个数n转化成1,可以有两种操作:(1)n减去1,这需要花费a;(2)n/k,当且仅当(n%k==0)可以实行,这需要花费b请问:将n变为1,最少需要花费多少?思路: 对于一个数x,如果可以整除k,那么需要比较一下(n-1)*a和b的大小,哪个小用哪个; 如果不能整除k,就比较一下到下面一个能整除k的数需要花费的值。附代码:#inclu...原创 2018-02-25 22:14:20 · 151 阅读 · 0 评论 -
POJ3278 农夫找牛(BFS)
每日打卡(1/1)传送门:点击打开链接题目大意:农夫在位置n,要去位置k。只能去前后两格或者到2*x(x为当前位置)的去,问到k最少要多少步。由于思维惯性,看见暴力题第一反应是DFS,结果搜了半天搜不出来,其实这是可以预见的,仔细想想就可以知道DFS的上界不好确定,大大加大了搜索的深度。所以,正确做法就是------------BFS!一个与二维图不太一样的地方就是,从当前节点到下一节点的过渡,可...原创 2018-02-23 21:43:31 · 1238 阅读 · 0 评论 -
POJ 1426 (BFS)
每日打卡(1/2)传送门:点击打开链接题目大意: 寻找一个是n(1 <= n <= 200)的倍数的整数,并且这个整数只能由1和0组成。思路: 首先,n是一个不小于1的数,假设最终求得的数是m,那么m必然第一位是1. 确定了首位后,出现两种情况:11和10,这时候用一个bfs/dfs就可以解决,为了保险起见写了BFS。在每种情况下用m%n,如果结果为0可以直接输出。...原创 2018-02-25 18:53:50 · 139 阅读 · 0 评论 -
POJ1860 再探货币兑换
每日打卡(1/2)传送门:点击打开链接题目大意: 货币换来换去啦,要求能否通过一系列兑换后,还兑换回自己的货币,并且钱增多了。题目思路: 用Bellman-Ford算法进行n-1次松弛,此时已经得到了最长路。如果还能进行松弛操作,说明存在正环。#include<iostream>#include<cstdio>#include<cstring>...原创 2018-03-05 22:27:13 · 172 阅读 · 0 评论 -
POJ3984 迷宫问题(BFS+标记路径)
每日打卡(1/1)传送门:点击打开链接题目大意: 01迷宫,0能走1不能走,从左上角走到右下角,要求输出最短路径。思路: BFS,汲取前天题目的经验,采用结构体指针标记路径,然后输出。代码:#include<iostream>#include<cstdio>#include<cstring>#include<string>#inc...原创 2018-03-01 20:22:56 · 266 阅读 · 0 评论 -
POJ1321 棋盘摆放问题(DFS)
每日打卡(1/2) 传送连接:点击打开链接题目大意: 给你一个n*n的棋盘,其中只有标#的格子能放棋子,且两个棋子不能位于棋盘的同一行或同一列,要求摆k个棋子,求方案数。大致思路: 裸DFS,和n皇后思路相同。以行数作为基准,如果当前列有符合要求的格子,可以采取放或不放两种方法,最后求和。#include<iostream>#include<cstdio>...原创 2018-02-22 12:39:31 · 316 阅读 · 0 评论 -
POJ3279 翻硬币(状态压缩DFS)
每日打卡(1/1)传送门:点击打开链接题目大意:一个n*m的矩阵翻硬币,翻一枚硬币会涉及周围四个,求将所有硬币正面朝上最少需要翻哪几个硬币。思路: 与之前一题求最少要翻多少次不一样,这次要记录状态。 首先我们先想到枚举第一排的翻法,然后对其他排时,只要上面一个硬币是反面朝上就翻,最后check一下。第一个比较值得学习的地方就是如何枚举第一排的翻法: for(int i=0;i&l...原创 2018-02-24 23:13:02 · 378 阅读 · 0 评论 -
POJ 3414 倒水(BFS+标记路径)
每日打卡(1/1)传送门:点击打开链接题目大意: 瓶子1能装a升水,瓶子2能装b升水,问要装c升水最少要几步?题解: 明显的BFS,其中需要注意的地方就是记录路径。 在结构体中设置一个node *pre,pre指向之前访问的操作,而结构体数组t也是BFS中一个比较新颖的操作。代码:#include<iostream>#include<cstdio>#i...原创 2018-02-27 20:49:22 · 232 阅读 · 0 评论 -
POJ2251 3D迷宫(BFS)
每日打卡(2/2)点击打开链接题目大意: 一个三维的迷宫,给定起点和终点,求最短路径。 ps:长宽高均不超过30思路1: 首先想到DFS,只是第一次写三维的DFS,感觉和二维没什么不一样。#include<iostream>#include<cstdio>#include<cstring>#include<string...原创 2018-02-22 21:09:05 · 265 阅读 · 0 评论 -
Codeforces Edu Round35 T1题解
尽管是比赛后做的,距今也有不少时间了,但觉得里面题目很具有思考价值,因此在此写下前4题题解。 A.求两个最近的最小值的距离 输入n个数,求两个最近的最小值的距离(数据保证至少存在两个最小值) 思路大致如下,水 for(i=0;iscanf("%ld",&a[i]);for(i=1;i{if(a[min]>a[i])min=i;}j=min;f原创 2018-01-08 14:37:00 · 147 阅读 · 0 评论 -
POJ3468 区间更新+区间查询(线段树)
与种花那题不同,此题区间内每一个数不止+1,而是+任意一个数。 只要将update操作中,增加一个参数即可。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<stdlib.h>#include<cmath>usin...原创 2018-02-13 22:42:56 · 287 阅读 · 0 评论