自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

FZU_zyt的专栏_(:з」∠)_

欢迎访问我的个人博客: orzyt.cn

  • 博客(221)
  • 收藏
  • 关注

转载 Manacher算法 //Longest palindromic substring

首先用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插入一个特殊的符号。比如 abba 变成 #a#b#b#a#, aba变成 #a#b#a#。 为了进一步减少编码的复杂度,可以在字符串的开始加入另一个特殊字符,这样就不用特殊处理越界问题,比如$#a#b#a#。下面以字符串 1221232112212321 为例,经过上一步,变成了 SS = “$#1

2015-10-27 21:26:47 543

原创 HDU 3068 最长回文 // Manacher

题目描述HDU 3068 最长回文解题思路题目大意: 输出最长回文子串的长度。 Manacher算法传送门 参考代码//**********************************************// Author: @xmzyt1996// Date: 2015-10-26// Name: HDU 3068.cpp//********************

2015-10-27 00:05:35 457

原创 HDU 1298 T9 // 字典树,枚举,dfs

题目描述HDU 1298 T9解题思路题目大意: 给出一些单词,及其出现的频率。然后再输入九宫格键盘中的数字(2~9),然后每次按下一个键,输出此刻联想到的单词(单词频率大的优先,频率相同的话,字典序小的优先)。 另外 比如 说 “hell 4”, “hello 7”, and “hellfire 3”, 则hell出现的频率不是0, 而是4+7+3 = 14!!参考代码//**********

2015-10-26 23:56:34 427

原创 HDU 1800 Flying to the Mars // Trie

题目描述HDU 1800 Flying to the Mars解题思路题目大意: 每个士兵都有各自的能力值,能力强的可以教能力弱的人 “骑扫帚”,两人用的是同一把扫帚 (若A B 用 一把, B C 用一把, 则说明 A B C用同一把)。另外题目要求每个士兵最多只能有一个学生或最多只能有一个老师。最后输出最少需要多少扫帚~不难知道,若n的士兵能力值各不相同的话,则他们只需要一把扫帚。因此,最终扫

2015-10-26 23:42:41 381

原创 POJ 1204 Word Puzzles // 字典树,枚举, 搜索

题目描述POJ 1204 Word Puzzles解题思路题目大意: 给出一个Word Puzzles,然后询问每个单词在其中出现的坐标(i, j, dir) i 为单词首字母的横坐标 ,j为纵坐标,dir为八方向之一(用A~H表示)这题我一开始是将Word Puzzles所有可能的单词建Trie,然后每个单词维护(i,j,dir)的信息,这样的话时间和空间的消耗都特别巨大,因此应该换一个思路。

2015-10-26 23:26:34 422

原创 POJ 2001 Shortest Prefixes // Trie

题目描述POJ 2001 Shortest Prefixes解题思路题目大意: 给出每个字符串的最短前缀表示,且不与其他字符串的表示相冲突。Trie中依次访问字符串的每个字符,若当前 字符节点 只被一个字符串所到达,则最短前缀即为从根节点到当前节点所构成的字符串。参考代码//**********************************************// Author: @xm

2015-10-26 23:09:37 311

原创 HDU 3172 Virtual Friends // 并查集,字典树

题目描述HDU 3172 Virtual Friends解题思路题目大意: 每次输入两个人A、B,代表两人成为朋友,那么两人所在的圈子将合并成一个新的圈子,输出这个新圈子的人数。 用字典树给名字分配编号,然后用并查集维护集合(圈子)关系即可。参考代码//**********************************************// Author: @xmzyt1996//

2015-10-26 23:00:10 360

原创 POJ 1056 IMMEDIATE DECODABILITY // Trie

题目描述POJ 1056 IMMEDIATE DECODABILITY解题思路思路同 POJ 3630 Phone List参考代码//**********************************************// Author: @xmzyt1996// Date: 2015-10-16// Name: POJ 1056.cpp//*************

2015-10-26 22:27:04 261

原创 HDU 1247 Hat’s Words // Trie, 枚举

题目描述HDU 1247 Hat’s Words解题思路题目大意: 判断一个单词是否能由字典中其它两个单词组合而成。 枚举每个单词所有的组合,然后查找分解出来的两个单词是否都存在于字典中即可。参考代码//**********************************************// Author: @xmzyt1996// Date: 2015-10-15//

2015-10-25 23:42:48 299

原创 HDU 1075 What Are You Talking About // 字符串映射,Trie

题目描述HDU 1075 What Are You Talking About解题思路题目大意: 给一些单词及其翻译,然后再输入一个句子,对其进行翻译,若句子中的某个单词不存在翻译,则原样输出,其中标点符号也是原样输出。建Trie树跑一遍,然后需要注意的是:【句子中某个单词A 是以 字典中某个单词B的前缀出现,但是字典里却没有单词A】这种情况.比如说: STRAT earth fnnvk E

2015-10-25 23:33:08 350

原创 POJ 2503 Babelfish // 字符串映射,Trie

题目描述POJ 2503 Babelfish解题思路题目大意: 给一些单词A及其对应的单词B,比如 dog -> ogday, 然后再输入单词B,输出单词A,若输入的B不存在映射,则输出”eh“.用STL的map应该可以水过去,但是还是用Trie实现一下~~参考代码//**********************************************// Author: @xmzyt

2015-10-25 23:12:04 300

原创 POJ 3630 Phone List // Trie

题目描述POJ 3630 Phone List解题思路题目大意: 给一些电话号码,只要存在其中一个号码是另一个号码的前缀,输出“NO”,否则输出“YES”。将n个号码插入字典树中,对每个节点维护有多少个号码经过此节点,然后再遍历n个号码,判断前缀是否唯一。参考代码#include <stdio.h>#include <string.h>#include <stdlib.h>struct Tr

2015-10-25 23:00:48 343

原创 HDU 1251 统计难题 // Trie入门题

题目描述HDU 1251 统计难题解题思路题目大意: 统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀)。对每个节点维护cnt,记录经过此节点的次数,然后访问前缀所在节点的cnt即可。参考代码#include <stdio.h>#include <string.h>#include <stdlib.h>struct Trie { Trie* next[26]; in

2015-10-25 22:20:25 314

原创 Trie字典树总结

(一)字典树概念字典树——又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。 它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 有三种基本的性质: 1) 根节点不包含字符,除根节点外每一个节点都只包含一个字符; 2)

2015-10-25 22:13:39 350

原创 UVALive 6432 Influence // 暴力dfs

Problem Description In any society there are social influence relations between individuals, where a person x can influence another person y. The same is true for Softopia, a special society where so

2015-10-02 23:30:06 367

原创 UVALive 6428 A+B // 扩展欧几里德

Problem Description There is a computer, which has two memory cells (let us denote these cells by the letters a and b). Each cell (variable) stores some integer at any time. The computer can execute

2015-10-02 23:10:11 559

原创 HDU 4122 Alice's mooncake shop // RMQ 线段树

题目描述HDU 4122 Alice’s mooncake shop解题思路题目大意: 有一家24小时营业的月饼店, 会连续营业m个小时, 且月饼每个小时的单价会浮动.在第i个小时会有一份订单.订单可以现做,也可以提前做好保存在冰箱里,(放在冰箱里每小时会花费一定的费用,且月饼有保质期为T).问在满足所有订单的前提下,最少的制作费用是多少?抽象出来就是,对于第i个小时的订单. 查询区间 [i-T,

2015-08-19 23:24:43 395

转载 加速输入输出

/**********仅适用于整型输入输出*********/typedef __int64 ll;ll Scan() { // 输入 ll res = 0, flag = 0; char ch; if((ch = getchar()) == '-') flag = 1; else if(ch >= '0' && ch <= '9') res = ch - '0'

2015-08-19 10:07:54 352

原创 UVALive 6838 Flipping Parentheses // 线段树 区间修改 最值查询

题目描述UVALive 6838 Flipping Parentheses解题思路题目大意: 给一个已经匹配好的 ‘(’ , ‘)’ 序列,然后每次在 i 处将这个位置的括号反转,问如果要将这个序列重新变成匹配序列,应该反转最左侧的哪个括号?先用一个a[i]数组, 表示的是 在前i个括号,左括号’(‘与右括号’)’的数量之差 index 1 2 3 4 5 6 si{

2015-08-17 23:57:56 580

原创 POJ 2528 Mayor's posters // 线段树 区间更新 离散化

题目描述POJ 2528 Mayor’s posters解题思路题目大意: 在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报?首先数据量较大,应该进行离散化,然后进行线段树的区间更新和查询. 但这题的难点在于每个数字其实表示的是一个单位长度(并非一个点),这样普通的离散化会造成许多错误 给出下面两个简单的例子应该能体现普通离散化的缺陷: eg1: [1, 10] [1, 5] [

2015-08-17 22:26:19 329

原创 POJ 3468 A Simple Problem with Integers // 线段树 区间更新

题目描述POJ 3468 A Simple Problem with Integers解题思路题目大意: 对给定的一段区间支持下列操作: 1) 对区间[l, r] 的所有数, 增加(或减少)某个值 2) 查询区间[l, r] 的和 线段树成段更新的类型题, 具体看注释~^ ^参考代码#include <stdio.h>#define lson rt<<1#define rson rt<<

2015-08-16 22:51:18 321

原创 HDU 1698 Just a Hook // 线段树 区间更新

题目描述HDU 1698 Just a Hook解题思路题目大意: 每段区间有三类状态: 值为1, 2, 3 要求支持下列操作: 1) 修改区间的状态, 然后输出整个区间[1, n]的和 线段树成段更新的入门题, 具体看注释哈~参考代码#include <stdio.h>#define lson rt<<1#define rson rt<<1|1#define mid ((l+r) >

2015-08-16 22:32:59 319

原创 HDU 2795 Billboard // 线段树 单点更新

题目描述HDU 2795 Billboard解题思路题目大意: 有一张h×w的矩形告示栏, 和 n 张 1×wi 的海报 海报每次张贴的位置为告示栏剩余位置的左上角. 要求支持下列操作: 1) 对于每张海报 输出其在告示栏的第几行 (若放不下, 则输出 -1)首先我们知道的是 告示栏上的海报最多只有n张, 即告示栏的行数最多只有n行有效 所以当输入的h大于n时, 令h = n 即可.

2015-08-16 22:11:16 292

原创 HDU 1394 Minimum Inversion Number // 线段树求逆序数

题目描述HDU 1394 Minimum Inversion Number解题思路题目大意: 给出0~n-1的一个排列,每次可以把前m个数放在后面,eg: a1{a}_{1}, a2{a}_{2}, …, an−1{a}_{n-1}, an{a}_{n} (m=0)(m = 0 ) a2{a}_{2}, a3{a}_{3}, …, an{a}_{n}, a1{a}_{1}

2015-08-16 18:06:46 328

原创 HDU 4286 Data Handler // 模拟链表

题目描述HDU 4286 Data Handler解题思路有一段区间和 两个指针(L 和 R) 要求支持下列操作: 1) 指针左移 2) 指针右移 3) 在指针所指位置插入一个数 4) 删除指针所指位置上的数 5) 反转 指针L 和 R 形成的区间可以将区间分成三段( [0, L) [L, R] (R, n] )考虑, 对每个区间用一个双端队列来维护. 对于反转操作,如果每次真的去反转

2015-08-16 17:34:34 339

原创 HDU 1754 I Hate It // 线段树

题目描述HDU 1754 I Hate It解题思路支持两种操作: 1) 区间最值查询 2) 单点更新 这题跟 HDU 1166 敌兵布阵 是类似的思路.参考代码#include <stdio.h>#define lson rt<<1#define rson rt<<1|1#define mid ((l+r) >> 1)inline int max(int a, int b){retu

2015-08-16 16:19:35 367

原创 HDU 1166 敌兵布阵 // 线段树

题目描述HDU 1166 敌兵布阵解题思路线段树的入门基础题. 题目要求支持下列操作: 1) 区间查询 (求和) 2) 单点更新 (加\减) // 具体还是看注释哈~^ ^参考代码#include <stdio.h>#define lson rt<<1 // 左儿子的下标#define rson rt<<1|1 // 右儿子的下标#define mid ((l + r) >>

2015-08-16 15:34:58 350

原创 HDU 5387 Clock // 模拟

题目描述HDU 5387 Clock解题思路题目大意: 给出时间 hh:mm:ss ,求 时针, 分针, 秒针 两两夹角.我们可以先计算出 0点 与 每根针 的夹角(顺时针方向 , 夹角[0, 360) ) 然后做差即可.参考代码#include <cstdio>inline int abs(int x){return x < 0 ? -x : x;}inline int gcd(int a,

2015-08-13 23:30:00 383

原创 HDU 4291 A Short problem // 矩阵快速幂, 循环节

题目描述HDU 4291 A Short problem解题思路题目大意:g(n)g(n) = 3g(n−1)g(n - 1) + g(n−2)g(n - 2) 其中, g(0)g(0) = 0, g(1)g(1) = 1求 g(g(g(n)))g(g(g(n))) mod 1000000007将递推关系变形为 : (g(n+1)g(n))\begin{pmatrix} g(n+1) \\

2015-08-12 22:43:56 372

原创 CodeForces 429B Working out // 递推dp

题目描述CodeForces 429B Working out解题思路题目大意: 有n*m个格子, 走过一个格子可以得到相应的分数. A 从(1,1)开始沿 下 或 右 走到(n,m) B 从(n,1)沿 上 或 右 走到(1,m) 两人路径有且只能有一个格子重合(重合格子的分数不算), 求两人分数之和的最大值.首先要保证只有一个格子重合,那么只可能是以下两种情况: 1) A向右走,相遇后

2015-08-12 21:54:48 1284 2

原创 HDU 5375 Gray code //递推dp

题目描述HDOJ 5375 Gray code解题思路题目大意: 将二进制数转换为格雷码(二进制位上有若干个 ‘?’ , 则该位可为0 或 1) 若格雷码某位上为1,则得到相应位上的分数,求最大分数.转换规则: B (二进制) -> G (格雷码) 1 2 … n B1{B}_{1} B2{B}_{2} … Bn{B}_{n} G1{G}_{1} = B1{B

2015-08-11 22:06:45 364

原创 HDU 5373 The shortest problem //模拟

题目描述HDOJ 5373 The shortest problem解题思路题目大意: 给一个数n, 比如123, 每次操作后把之前各位数字之和加到末尾 由于1+2+3 = 6 所以 123->1236 类似得到1236->123612->… 问,经过t次操作后,得到的数是否能被11整除.首先需要知道的是,被11整除的性质是”奇偶位的和之差能被11整除”. 然后根据此性质开始模拟操作过程即可

2015-08-11 20:47:24 317

原创 HDU 4417 Super Mario // 线段树

题目描述HDU 4417 Super Mario解题思路题目大意: 查询区间 [l, r] 有多少个数 <= h.之前只接触过一点线段树, 所以还是来一发线段树吧= =|参考代码#include <iostream>#include <cstdio>#include <vector>#include <algorithm>#define MAX_N 100010#define Lson i

2015-08-10 22:40:10 331

原创 [HDOJ 4550] 卡片游戏

题目描述卡片游戏解题思路参考代码#include<iostream>#include<string>using namespace std;int main(){ int T,i; string ans,s; scanf("%d",&T); while(T--){ cin >> s; ans = s[0]; ch

2015-07-26 17:33:59 349

原创 [HDOJ 4551] 生日猜猜猜

题目描述生日猜猜猜解题思路参考代码#include <stdio.h>int day[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};int gcd(int a,int b){ if (a < b) return gcd(b,a); else if (b =

2015-07-26 17:30:37 340

原创 HDU 4548 美素数 // 素数筛法

题目描述美素数解题思路参考代码#include <stdio.h>#include <string.h>const int maxn = 1000010;bool IsPrime[maxn];int Prime[maxn/2];int ans[maxn];void GetPrime(){ int tot = 0; memset(IsPrime,true,sizeof(Is

2015-07-26 17:26:18 350

原创 [HDOJ 4501] 小明系列故事——买年货

题目描述小明系列故事——买年货解题思路参考代码#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn = 110;struct Node{ int price,score,val;}s[maxn];int dp[maxn][maxn][7];int

2015-07-26 17:24:43 551

原创 [FOJ 1896] 神奇的魔法数

题目描述神奇的魔法数解题思路参考代码#include <stdio.h>#include <string.h>#include <math.h>typedef long long ll;int m, dp[15][10];void init(){ memset(dp,0,sizeof(dp)); for (int i = 0; i < 10; i++) dp[1][i

2015-07-26 17:20:15 340

原创 FOJ 1893 内存管理 //模拟

题目描述内存管理解题思路参考代码#include <iostream>#include <algorithm>#include <vector>#include <string>#include <cstring>#include <map>const int maxn = 110;using namespace std;struct Process{ int begin,s

2015-07-26 17:19:31 335

原创 [FOJ 1891] 升降序列

题目描述升降序列解题思路参考代码#include <iostream>#include <algorithm>using namespace std;const int maxn = 50010;int ans[maxn],temp[maxn];int main(){ int T; scanf("%d",&T); while (T--){ int

2015-07-26 17:17:50 441

空空如也

空空如也

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

TA关注的人

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