自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU5591 - ZYB's Game (简单博弈)

题目链接思路代码思路一个数,两个人去猜,先猜到的人输。 这个题目抽象一下,就可以理解为,有一根棍子,中间有一个宝物,每个人可以依次从两端切去一部分,先切到的人输。当出现1 0 1的情况的时候,是后手必赢得。怎样才能得到这样的结果呢,分析可知,先破坏两边长度平衡的会输,因为后手可以对应的在另一边制造平衡,就会出现最简单的那种情况。要想让后手赢,就要让先手破环平衡,很显然只有当最开始的时候就是平

2015-12-08 12:36:52 806 1

原创 HDU5510 - Bazinga (kmp+暴力)

题目链接思路给一列字符串,对于第 i 个字符串来说,只要之前所有的字符串中有不是他的子串的,就算成功,求最大的 i。枚举 i ,去匹配之后所有的 j (j>i),并对所得的信息进行记录。 假如 i 不是 j的子串,即成功。那么后面所有的 i‘ 就不用再去尝试 j 了。 假如 i 是 j 的子串,那么 j 就拥有它的所有信息,可以知道在后面的匹配中,j 能匹配成功,则 i 也能匹配成功,

2015-12-08 12:35:16 445 2

原创 HDU5586 - Sum (最大子列和)

题目链接思路代码思路将数组处理一下,保存变化后和变化的差值。 这样的话,正数代表有益,负数代表无益,这样对整个数组进行一次遍历,就可以得到最大获益的变化。代码#include <iostream>#include <cstdlib>#include <cstdio>using namespace std;typedef long long ll;int num[1000100];int

2015-12-08 12:33:24 434

原创 HDU1015 - Safecracker (深搜)

题目链接思路代码思路这道题的题意刚开始理解错了,以为每一个字母的权重是所给字符串中的顺序(论英语的重要性)。每个字母的权重还是字母表中的权重,AA 还是 1 ZZ 还是 26 。他给的字符串的顺序就没有什么用,只是确定了哪些字符可选。相当于有五个空,把26个字母中的一部分逐个尝试填入。实际上就相当与5个for循环。又因为多种可能时,需要输出字典序最大的,所以只要在搜索时优先选择权值大的字母即可

2015-12-01 15:16:42 465

原创 HDU1253 - 胜利大逃亡 (广搜)

题目链接思路代码思路广搜,求最短路。这道题的数据让我有点无语,应该是路径相对来说比较单一。不需要指导函数来优化方向,用了优先队列和估价函数反而超时了(可能是浪费在各种操作和函数传递上面了吧,也有可能是我写题的方式不对)。 用普通的队列,再把各种函数调用也降到最低,才勉强过了。代码#include <iostream>#include <cstring>#include <cstdio>#

2015-12-01 15:01:33 340

原创 HDU1240 - Asteroids! (广搜)

题目链接思路将普通的迷宫最短路推广到三维,数据量比较小,思路和步骤与二维迷宫求最短路一致。 不过在加一个坐标,对于这道题来说,需要注意的是坐标的表示方式,题中的坐标为列行层。POJ2225 同样的题代码#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;struct

2015-10-15 23:55:15 503

原创 HDU1241 - Oil Deposits (深搜)

题目链接思路dfs求联通块。代码#include <iostream>#include <cstdio>using namespace std;const int maxn = 100;int n, m;int xx[] = {0, 1, 1, 1, 0, -1, -1, -1};int yy[] = {1, 1, 0, -1, -1, -1, 0, 1};bool maze[maxn]

2015-10-15 23:54:11 361

原创 HDU1010 - Tempter of the Bone (搜索+剪枝)

题目链接 : HDU1010 - Tempter of the Bone思路代码思路在最基本的走迷宫上加了一个固定步数的限制。在原先的代码中并不需要太多的改变,将成功推出条件更改一下。将这个表格,从上到下,从左到右填入数字 1,2,3……。观察就会发现,奇到奇,偶倒偶都需要偶数步,否则需要奇数步,这样的话就可以在搜索前加上一个判断。如果不符合这个条件的话,就是完全不可能的。这样进行剪枝后,还是

2015-10-15 18:03:08 329

原创 POJ2676 - Sudoku (深搜)

题目链接思路题意就是让完成数独游戏。 从第一个格子开始,依次尝试各种可能。当前节点填入的数字,不能与当前行,当前列,当前九宫格中现存的数字重复。这是最基本的思路,很容易超时,不过这道题的数据比较特别。倒着搜,也就是从最后一个节点开始尝试,会非常快。下面这个是从前面搜的,思路比较简单,几乎是飘过。 还有一道几乎一样的题,POJ - 2918代码#include <iostream>#includ

2015-10-13 23:28:26 559

原创 foj2155 - 盟国 (并查集的删除操作)

题目链接思路并查集的删除节点,基本的并查集只涉及合并和查询,没有删除。 并查集的结构是树形的,在删除一个节点的同时还要保持其子节点与根节点的相对关系,是很麻烦的,所以我们的做法就是不去删除,而是重新为它开辟空间来进行存储。 也就是再开一个info数组,来保存各个节点的关系的存储位置,在用一个par数组来维护节点之间的关系。 对于整个代码来说,并查集的操作并不需要变化,只需要添加一个del函数。

2015-10-11 21:11:53 731

原创 SPOJ42 - Adding Reversed Numbers (简单题)

题目链接思路题意真的很容易理解错呀…… 就是给两个数,翻转后加和,然后再翻转后输出 用字符串加,不用翻转(从头开始加就是反的),直接加然后除掉前面的 0 输出就行代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char ans[20];char

2015-10-11 20:17:57 368

原创 SPOJ1 - Life, the Universe, and Everything (水题)

思路A+B的题代码#include <iostream>#include <cstdio>using namespace std;int main(){ int num; while(scanf("%d", &num)!=EOF&&num!=42) { printf("%d\n", num); } while(scanf("%d", &nu

2015-10-11 20:16:24 402

原创 HDU1232-畅通工程 (并查集)

题目链接思路并查集,n个节点最少需要建设n-1条边,每有一个连接不同集合的边出现,所需建设的路就少一条。代码#include <cstdio>#include <cstring>using namespace std;const int maxn = 1000;int par[maxn+10];int get_par(int a){ if(par[a]<0) return a;

2015-10-08 00:29:24 266

原创 POJ1308 - Is It A Tree? (并查集)

题目链接思路要想构成一棵树,那么就要满足,每一次的连边都是在两个不同的集合间进行的,这个用并查集就可以做。 还要将所有的节点都要连起来,所以记录一下节点数和边数,利用set就可以得到不同的节点个数,然比较是否满足节点数等于边数加一。 再对空树进行特判。代码#include <algorithm>#include <set>#include <cstdio>#include <cstring

2015-10-08 00:00:24 341

原创 POJ1861 - Network (并查集,最小生成树)

题目链接思路按照最小生成树来做就行,不要受样例的影响。代码#include <algorithm>#include <cstring>#include <cstdio>using namespace std;int par[1010];int get_par(int a){ if(par[a]<0) return a; else return par[a] = get_par

2015-10-07 23:58:36 355

原创 POJ2524 - Ubiquitous Religions (并查集的基础应用)

题目链接思路并查集,询问有多少个集合。代码#include <iostream>#include <cstring>#include <cstdio>#include <set>using namespace std;const int maxn = 50100;int par[maxn];int find(int a){ if(par[a]<0) return a; el

2015-10-07 23:57:02 298

原创 POJ1611 - The Suspects (并查集的应用)

题目链接思路并查集的简单应用,用负数来判断是否到达边界,直接用根元素里的数字的绝对值来确定当前集合的大小。代码#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int maxn = 30010;int par[maxn];int get_par(int cur){ if(p

2015-10-07 23:56:06 293

原创 HDU1556 - Color the ball (线段树超时 利用数组解决)

题目链接思路看上去就是一道简单的线段树的应用,区间更新,单点查询,但直接做却超时了。 找优化方法的时候得到了另一种方法,利用数组来进行解决。 我们都知道如果只解决区间求和问题的时候,可以直接对数组进行处理, 处理for(int i=1; i<=n; i++) ans[i] += ans[i-1];查询result = ans[right] - ans[left-1];同样的,如果我们要对区间

2015-10-07 23:53:53 475

原创 HDU1698 - Just a Hook (线段树 区间更新)

HDU1698 - Just a Hook (线段树 区间更新)题目链接思路线段树的应用,区间更新(不用更新到底,更新到终止节点就行,查询时再将所涉及的节点信息push_down下来),颜色的数量用一个数组记录下来就行代码#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#define lson t

2015-10-07 23:52:15 401

原创 HDU5444 - Elven Postman (树的遍历)

题目链接思路按照二叉搜索树的建树规则,将输入的数据构建成树,然后遍历就行代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 1000;int tree[maxn+10];int ls[maxn+10];int rs[maxn+10];int nCoun

2015-10-07 23:50:32 324

原创 HDU5443 - The Water Problem (线段树)

题目链接思路线段树的应用,可是因为数据量太小,可以直接暴力代码#include <iostream>#include <cstdio>#define lson tree[root].ls#define rson tree[root].rsusing namespace std;const int maxn = 1000;struct node{ int ans; int

2015-10-07 23:49:59 524

原创 HDU1754 - I Hate It (基础线段树)

题目链接思路线段树的基本应用,区间查询,单点更新代码#include <algorithm>#include <iostream>#include <cstdlib>#include <cstdio>#define lson tree[root].ls#define rson tree[root].rsusing namespace std;const int maxn = 200000

2015-10-07 23:48:09 280

原创 HDU5437 - Alisha’s Party (优先队列 模拟)

题目链接思路按照题目要求,利用优先队列进行模拟。需要注意的就是可能有多个数据是同一时间,按照能进入的最大人数计算,不能累加,所有操作完成后,剩下的人还要按照礼物大小来依次全部进入。 刚开始做的时候,觉得直接用优先队列,可能会超时,还自己写了一个二叉堆,不过提交时发现并没有什么改善,估计是自己写的太烂了,还不如直接用C++里边的……代码#include <iostream>#include <cs

2015-09-29 18:27:01 401

原创 HDU2067 - 小兔的棋盘 (递推)

题目链接思路代码思路一道递推题(或者说有点DP的感觉)。 看网上有人说是卡特兰数,不过对那个不是很熟悉,也就没有用。代码#include <cstdio>using namespace std;typedef long long LL;LL sta[40][40];int main(){ sta[0][0] = 1; for(int i=1; i<=35; i++)

2015-09-09 21:15:45 425

原创 HDU1597 - find the nth digit (找规律)

题目链接思路代码思路这个规律是很明显的,跟据 n 判断出所在的层数(可以提前打表),然后对 9 取模就行(整除时输出 9)。代码#include <iostream>#include <cstdio>using namespace std;typedef long long LL;LL num[66000];// 普通查找//int find(int value)//{// fo

2015-09-09 20:34:59 554

原创 HDU1425 - sort (简单题)

题目链接思路代码思路水题,可以直接用 sort 过。另一种思路就是:因为题中的数据是不重复的,且数据较少,所以直接开一个数组,将对应的位置设置为真,然后从后往前输出即可,也是比较慢的,但也是一种思路。代码#include <cstdio>#include <cstring>using namespace std;bool num[1000100];int main(){ int n

2015-09-08 17:13:12 705

原创 HDU1061 - Rightmost Digit (二分幂取模)

题目链接思路代码思路需要取出 NNN^N 的最后一位,就相当与对 1010 取模。二分幂取模实际上就是利用分治的思想。nn=n(n/2)∗n(n/2)n^n=n^{(n/2)}*n^{(n/2)}, 如果 n&1==1n\&1==1 还需要再乘上一个 n。代码#include <cstdio>#include <cmath>using namespace std;int pow_mod(int

2015-09-08 16:41:15 448

原创 HDU1053 - Entropy (哈夫曼树)

题目链接思路代码思路纯数据结构。代码#include <iostream>#include <cstdio>#include <map>#include <queue>#include <cstring>using namespace std;struct node{ char ch; int num; int ls, rs;} tree[100];stru

2015-09-07 21:55:03 535

原创 HDU1050 - Moving Tables (贪心)

题目链接思路代码思路贪心,两个操作如果有重叠,就一定不会同时进行,两者以任何顺序操作都不会影响到整体的时间。 所以每次操作时,任取一个并且将可以和他同时进行的操作一次完成,直到全部执行为止。在执行完一个操作后,假如下一个操作并没有和其他操作冲突,那执行必然对整体有利,假如有两个(多个)操作重叠,他们几个肯定不可能同时进行,所以任取一个都可以保证整体最优。 对于这道题还有应该需要注意的一点,这道

2015-09-07 20:33:52 546

原创 HDU5428 - The Factor (因式分解)

题目链接思路代码思路解法就是找到所有的数的因子中的最小的两个(除过 1)的乘积,我是直接做的。如果有一个大的质数,就会了浪费很多的时间,所以超时了。比赛的时候就被 hack 了。 应该有快速的分解因子的方法,或者可以用大数判素数来直接将非常的数进行排除。比赛的时候脑子短路了,从 1 到 n 去验证,所以如果有一个比较大的质数,就会十分耗时。 这样做其实是没有必要的,顶多枚举到 sqrt(n) 就

2015-09-07 20:15:27 357

原创 HDU1049 - Climbing Worm (模拟)

题目链接思路代码思路因为最后一次不用下滑,所以我们模拟到 deep−updeep-up 就可以停止了。代码#include <cstdio>using namespace std;int main(){ int deep, up, down; while(scanf("%d%d%d", &deep, &up, &down)&&deep) { for(int

2015-09-06 23:18:51 390

原创 HDU5427 - A problem of sorting (简单题)

题目链接思路代码思路简单题, 给姓名和生日的组合, 让按照年龄的大小输出。 不过姓名可能中间有空格,因为生日是一行的后4位,所以直接读一行,然后在生日前截断,排序就行。代码#include <cstring>#include <algorithm>#include <cstdio>using namespace std;struct node{ char name[110];

2015-09-06 20:26:19 967

原创 HDU1048 - The Hardest Problem Ever (简单题)

题目链接思路代码思路一道简单的入门题,列出表,然后输入输出就行。不过最开始智商被压制了,漏掉了字母 DD, WA 到哭。代码#include <cstring>#include <cstdio>using namespace std;int main(){ char table[250]; char text[1000]; table[0] = '\n'; fo

2015-09-06 19:03:01 420

原创 HDU1047 - Integer Inquiry (大数加法)

题目链接思路代码思路大数加法,这道题的格式一直没控制好,PE了好长时间。代码#include <iostream>#include <cstring>#include <algorithm>using namespace std;char ans[110];char num[110];void reverse(char *str){ int len = strlen(str);

2015-09-06 17:06:27 710

原创 HDU1045 - Fire Net (深搜)

题目链接思路代码思路这道题其实是一道很经典的二分图匹配问题,在我看了后准备放弃的时候,发现这道题的数据量最大是 4 ,所以这就给我们暴搜提供了可能。最多只有16个方块,所以直接从第一个开始枚举,以后的每一步都分两种情况,放和不放,在最后出界的时候记录一下最大值就行了。具体实现见代码代码#include <cstdio>#include <algorithm>using namespace std

2015-09-05 23:56:14 356

原创 HDU1042 - N! (大数运算)

题目链接思路代码思路求 N 的阶乘,阶乘大家都会,这道题考的就是大数,因为 N 的取值达到了10000,那么他的结果的位数就已经达到了上万了。 所以就是模拟大数乘法,因为阶乘时,一个数很大,另一个数是相对较小的,所以思路是比较简单的。 具体的思路就是,以前计算乘法时是用一个数的每一位去乘另一个数,然后按照一定的规则进行相加。现在我们直接用小数去乘大数的每一位,进位的时候不再局限是个位数,而是直

2015-09-05 15:11:36 385

原创 HDU1040 - As Easy As A+B (简单题)

题目链接思路代码思路水题代码#include <algorithm>#include <cstdio>using namespace std;int num[1010];int main(){ int t, n; scanf("%d", &t); while(t--) { scanf("%d", &n); for(int i=0

2015-09-04 17:14:08 277

原创 HDU1039 - Easier Done Than Said? (简单题)

题目链接思路代码思路题目要求按照3个标准来验证密码是否合格。所以遍历一遍字符串,看是否满足就可以了,这一类题的题意都很简单,就是要细心,考虑到一些边界特殊情况什么的。细节见代码……代码#include <cstdio>#include <cstring>using namespace std;char str[1000];int main(){ bool vowel[130];

2015-09-04 17:05:52 389

原创 HDU1037 - Keep on Truckin' (简单题)

题目链接思路代码思路这是一道英语阅读题代码#include <cstdio>using namespace std;int main(){ int a, b, c; scanf("%d%d%d", &a, &b, &c); if(a<168) printf("CRASH %d\n", a); else if(b<168) printf("CRASH %d\n",

2015-09-04 15:56:43 341

原创 HDU1036 - Average is not Fast Enough! (简单题)

题目链接思路代码思路比较难的地方就是各种格式控制,做题的时候细心点就可以了。代码#include <cstdio>#include <cmath>using namespace std;int main(){ int n, id, ans; double s; char str[10]; bool finish; scanf("%d%lf", &n, &s

2015-09-04 15:42:02 508

空空如也

空空如也

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

TA关注的人

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