自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mr.Phoebe的专栏

退役后还是一个弱渣

  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 gym 100430【2-SAT+输出方案】

一眼题 注意下表标问题。// whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorithm>#include <iostream>#include <iomanip>#include <cstring>#include <climits>#include <com

2015-09-29 20:45:59 655

原创 gym 100430 G【贪心+map瞎搞】

题意: 给你N个东西,其中任意两种东西可以合成。 问你最多可以合成多少东西。 在最多合成东西的情况下,要使得字典序最小。思路: 先按照贪心的方法构造出字典序列最优的解。 然后有可能有一个剩下了一些的数量的东西(也可能没有) 那么就按照字典序从后往前扫,强行将最后的几对拆开来和剩余的匹配。#include <cstdio>#include <cstring>#i

2015-09-29 20:33:15 644

原创 HDU 5469 Antonidas【点分治+hash】

首先将串的前缀和后缀分别hash。 然后用树分治。对于树分治,每一个分治的root,我们首先要加上经过root的串匹配出的答案,其次要减去v→root→vv\rightarrow root\rightarrow v这样的串(不合法)。 做了一些剪枝,因为如果ans>0ans>0,则就是匹配到了。 如果都没有则继续进行分治。对于匹配答案,我们记录合法的后缀,然后用前缀去匹配。// wh

2015-09-26 20:41:30 1694

原创 HDU 4436 str2int【后缀自动机】

后缀数组也能做这题。首先,我们先想到的是,根据数据范围,肯定是字符串的数据结构。因此想到了后缀自动机。那么后缀自动机就起到了去重的功能。先将所有的串加上间隔符号,加入SAM,再拓扑排序。于是,对于每一个节点都可以表示多个十进制数字。 我们就可以在后缀自动机建立的图上面进行转移。 每次从父亲节点转移到儿子节点,父亲节点能够表示的所有数字都要乘以10,再加上儿子节点表示的数乘以父亲节点表示的串的个数

2015-09-25 17:21:48 539

原创 Hihocoder 1236 Scores【分块+bitset】

对于每一个分数,我们对其进行排序。 然后分成n√\sqrt{n}块,每一块用一个bitset统计有多少人属于这个分数段。 然后对于每一次查询,我们用lowerbound搜出它属于那一块分数段,取出之前分数段的得分情况,然后暴力维护这一分数段。 每一个成绩统计出来的bitset,&到最后就是有多少人输了。count一下就好。注意,每一次的答案都要和上一次异或,强制在线。// whn63

2015-09-25 16:41:28 782

转载 HDU 5421 Victor and String【回文树扩展——可左右添加字符的回文树】

传送门:【HDU】5421 Victor and String能维护左右最长回文的前提是要知道除了上一个节点表示的最长回文串能更新出新的本质不同的回文串外,其他节点都做不到(比赛的时候就是这个性质没想清楚,然后想了个O(N2)的做法……),这个可以YY一下,想清楚了就简单了,分别维护左右last指针,然后用一棵回文树实现这个过程,具体过程我就不多说了。#include <stdio.h>#incl

2015-09-25 09:22:36 705

原创 UVALive 4811 Growing Strings【AC自动机+简单dp】

AC自动机 给出n个字符串,问最多能够选出多少个串组成序列,并满足前一个字符串是后一个字符串的子串。 这个和上一题类似,但是更加简单。 对于AC自动机,我们知道的是,父亲节点是它所以儿子节点的前缀,fail[i]fail[i]节点是ii节点的后缀,因此都是它的子串。 那么我们可以考虑dp的情况。 dp[u]=max(dp[fa[u]],dp[fail[u]])+end[u]dp[u]=ma

2015-09-25 09:12:56 672

原创 HDU 4057 Rescue the Rabbit 【AC自动机+状压DP】

题目: 给出一些模式串,每个串有一定的价值,现在构造一个长度为M的串,问最大的价值为多少,每个模式串最多统计一次。由于每个模式串最多统计一次,也算是降低了难度,最多10个串,容易想至于状态压缩。 AC自动机上的节点最多1000=100∗101000=100*10个,而最终的串长度最多为100.容易想到的DP暴力转移。 dp[i][j][k]:表示长度为i的串,位于AC自动机上的节点j,模式串的

2015-09-24 17:12:36 712

原创 HDU 4117 GRE Words【AC自动机+线段树】

和这题有些类似。AC自动机。 字符串匹配算法,大概就是kmp,ac自动机,后缀数组,后缀自动机这么几种了。对于这题,我们很容易想到暴力dp,用kmp去匹配,总复杂度可以做到o(n2+2∗m)o(n^2+2*m)(n为字符串个数,m为所有字符串的总长),但这样还不够,超时妥妥的。 那就要考虑怎么维护这个dp了。 把自动机建好后,从前往后一个个的,去匹配。在自动机上匹配的过程中,我们可以发现,这个

2015-09-23 21:42:43 918

原创 HDU 5457 Hold Your Hand【最小割+字典树】

在这里先感谢YYN菊苣对我解题的帮助。首先,我们按照前缀和后缀建立两棵字典树。 节点总数为256∗8∗2256*8*2,每一个叶子节点是我们的数字。 其次,我们对读入的操作来更新字典树,假设字典树有边权,且初始化为INF,则我们每次将操作所得到的前缀或者后缀指向它的那条边取min(p→cost,cost)min(p\rightarrow cost,cost)。注意注意注意,读入的后缀也需要翻转一

2015-09-23 10:10:02 1035

原创 HDU 5238 Calculator【线段树】

其实这题真是不好想啊 首先,我们观察到29393不是一个质数,通过质分解我们得到29393=7∗13∗17∗1929393=7*13*17*19于是就可以想到中国剩余定理,将数给分解了再求模方程。那么就可以将所有的数对这四个数取模。 剩下就是如何维护修改了。注意到,最多就只有20个数,所以我们可以用一个长度为二十的数组记录,每个数加上某段变化之后可以得到什么。那么就用线段树区间查询,通过[L,R

2015-09-22 20:26:06 633 2

原创 hihocoder 1233 Boxes

打表 通过最终排序好的情况直接bfs得到合法状态的,状压的时候有多种方法。 第一种是最直接的,因为只有7个数,每个位置上最多也只可能是7个数,所以你用一个数组表示每一位有哪些块,然后用一个long long状压出你这个状态的情况,用map标记判重。 这样的复杂度会稍微大一些,可能不能直接在线打表,所以你大一个表再交上去。我们的比赛的时候程序大概88kb,杭电上就会挂了。第二种是用n进制状压,用

2015-09-21 18:24:38 665

原创 HDU 5454 Excited Database【线段树】

简单线段树,就是推公式的过程有点不是特别熟练。 按照叉姐的方法,可以用三个树状数组维护,三种情况。 按照坦克工程师的方法,用容斥,将一个矩形分解成三个三角形,一个大的直角三角形减去两个小的直角三角形,一种情况,复杂度O(n(logn)2)O(n(logn)^2)。 我的写法无非就是将叉姐的方法换成两个线段树。我们先将对角线缩成一个点,所以总共有2n2n条主对角线,2n2n条负对角线,所以是4n

2015-09-21 18:08:47 1057

原创 Hihocoder 1228 Mission Impossible 6

#include<bits/stdc++.h>#define MAXM 10005using namespace std;int t,m;int ope_num;bool mode;bool copy_status;int copy_pos1;string s;string clip;string board;int caret_pos;//---------------------

2015-09-21 12:02:55 621

原创 HDU 5458 Stability【树链剖分】

因为保证一定联通,所以我们就可以用一个树链剖分来维护 我们可以倒过来做,先将图删成一棵树 然后删除的时候将那条链区间更新为0. 然后区间求和#include <algorithm>#include <iostream>#include <iomanip>#include <cstring>#include <climits>#include <complex>#include <f

2015-09-19 17:35:16 866

原创 Codeforces Round #306 (Div. 2) D-E

D构造 首先我们想到的是做一个对称的图形,如同哑铃一般,中间的就是桥,两侧的就是双连通块。 那么我们想到的是构造一个双连通块,使得这个双连通块有一个点的度数为k−1k-1,其他点的度数为kk。 接着想到了完全图,对于一个完全图来说,每个点的度数为n−1n-1,但是这样做不能够保证有一个点的度数为k−1k-1,于是想到再加上一个点用k+2k+2个点去构造。 此时发现当kk是偶数的时候是不能够构

2015-09-19 11:16:58 501

原创 POJ 3415 Common Substrings【后缀自动机】

max:即代码中 len 变量,它表示该状态能够接受的最长的字符串长度。 min:表示该状态能够接受的最短的字符串长度。实际上等于该状态的 fail 指针指向的结点的 len + 1。 max-min+1:表示该状态能够接受的不同的字符串数。 right:表示节点u所能够接受的字符,在原字符串中出现过多少次 right*(max-min+1)就是节点u能够接受的字符串在原字符串中出现的次数。

2015-09-18 12:02:11 883

原创 Looksery Cup 2015 B. Looksery Party

贪心构造题 一定可以构造出来。枚举每一个人,如果此时已经收到的短信数量恰好等于预测的数目,则将其选中。因为自己会给自己发短信,所以恰好多余预测数目,之后短信只增不减就不用考虑了。 短信少于预测的可能会收到影响,所以直接暴力到不会受到影响位置。// whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#

2015-09-18 10:57:55 536

原创 【后缀数组学习】

原文转载自博客,但有部分修改。模板后缀数组是解决一系列字符串题目的利器,后缀数组中保留了这样的信息。sa[i]表示排名为第 i 位的后缀是从sa[i]开始的。通过倍增算法可以在O(nlogn)的时间复杂度内将所有的后缀进行排序。而height数组也是在处理问题中经常要使用到的,height[i]表示排名第 i 的后缀与排名第 i-1 位的后缀的最长公共前缀的长度。具体见代码。#include <cs

2015-09-17 21:55:58 648

原创 Codeforces Round #320 (Div. 1) C. Weakness and Poorness

具有很明显的单峰性质 直接三分,用动态规划的方式求出weekness 注意三分的时候,很多人用eps来判断三分结束,这样有一些精度误差 直接三分100次即可// whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorithm>#include <iostream>#i

2015-09-17 16:11:23 531

原创 Codeforces Round #320 (Div. 1) B. "Or" Game

贪心思路: 因为是或的关系,所以只要使得某个数尽可能得大就可以了。 于是第一个想法是,选出最大的那个数,使得它乘以k次最大。但是这样会有部分情况是错误的。 比如 2 1 49 102\ 1\ 4\\ 9\ 10 当最大值和次大值相近的情况下,有可能他们的k次乘积后两者并没有差一个二进制,而你将大的那个乘起来之后可能导致你在低位有损失。所以就暴力枚举每一个位置乘以k次之后的值,求或得到答案。

2015-09-17 10:35:42 486

原创 Codeforces Round #320 (Div. 1) A. A Problem about Polyline

首先明确一点的是,所给的点(a,b)(a,b)肯定在斜率为负的斜线上面使得xx最小。 那么我们怎么确定是在哪一条折线呢?看下图: 每条斜率为-1的折线都可以被分成虚线间的几部分。这是使得xx最小的分割方式,如果某个点虽然处于图中(1,1)→(2,0)(1,1)\rightarrow(2,0)的折线上,但是属于的是第二条虚线下方、第三条虚线上方,那么我们可以通过将整个图形缩小,使得它处于第一条

2015-09-17 10:08:47 476

原创 ZOJ 3899 State Reversing【NTT】

题意: 有N(有序号)个怪兽,给出M(1~M)个房间,每个房间的初始状态为1,接下来有D次操作,每次操作是选择一个区间使得区间内房间的状态反转(0->1 , 1->0),每次操作后计算将这N个怪兽放进所有状态为1的房间内,且每个状态为1的房间非空的方案数。(注意房间之间不可辨别。两种方案一样,当且仅当两种方案中存在两个房间,里面的怪兽数量以及编号一致)思路: 用线段树来更新available的

2015-09-16 09:09:24 957

原创 Aizu 2541 Magical Bridges

题意: n个岛屿,由m条桥连接,其中有k条是魔法桥,你可以用魔法把他们变成相同长度。 求在执行魔法后,两个起点S1和S2到终点T的最短路的最小绝对差。 (1≤n≤1000,1≤m≤2000,1≤k≤100)(1\leq n\leq 1000,1\leq m\leq 2000,1\leq k\leq 100)S1S_1和S2S_2到TT的最短路将会是如 j×x+disj\times x+dis

2015-09-16 00:21:22 535

原创 Aizu 2538 Stack Maze【记忆化搜索】

其实我并不知道我的姿势算是什么。 一开始想着用二维的记忆化搜索,用dp[x][y]dp[x][y]表示(x,y)→(H,W)(x,y)\rightarrow(H,W)能够得到的最大happy值。但是很遗憾的是,这样没法记录,在前进的路上,我有多少个宝石、能够经过多少宝石洞。 所以就想着如何记录,最后发现难以记录。如果是这样的记忆化搜索,时间复杂度大约是O(n2)O(n^2),那么就想着可以进行扩

2015-09-15 21:24:24 498

原创 HDU 5439 Aggregated Counting

找规律暴力预处理 之后二分 1 11\ 1 2 2 32\ 2\ 3 3 4 53\ 4\ 5 那么5的位置就是1×1+2×(2+3)1\times 1 + 2\times(2 + 3) 然后暴力预处理每一段,复杂度大约是n√\sqrt{n}// HDU 5439.cpp// Created by whn6325689 on 15/9/13.// Copyright (c) 2

2015-09-13 21:31:56 607

原创 HDU 5442 Favorite Donut

第一种方法,最小表示法 其实呢,你将每一个字母反转一下,将’a’变成’z’,就是最小表示法。 但是反转之后,我们如果用最小表示法,得到的是,在原串上位置最靠后的情况,与题意不服,所以我这里就强行将之往后硬判,最坏复杂度是当串所以的字符都相同的情况,退化成O(n2)O(n^2)。// whn6325689// Mr.Phoebe// http://blog.csd

2015-09-13 21:25:01 707

原创 Codeforces Round #319 (Div. 1) B. Invariance of Tree

B. Invariance of TreeA tree of size n is an undirected connected graph consisting of n vertices without cycles.Consider some tree with nn vertices. We call a tree invariant relative to permutation p =

2015-09-11 20:00:57 921

原创 HDU 4407 Sum

这题一开始以为是什么数据结构,但是确实没想到什么东西维护和一个变化的互质的东西。但是如果是容斥就可以做,对于无修改的数列,和p互质的数的累加。 但是因为各种操作数最大为1000,所以可以暴力维护修改的情况。最多不超过500∗500500*500个查询。// whn6325689// Mr.Phoebe// http://blog.csdn.net/u0130079

2015-09-10 11:05:46 382

原创 Bubble Cup 8 - Finals [Online Mirror] - A.Fibonotci【分段+ST表】

因为 sis_i为近似周期序列,而且告诉你了mm个位置以及数字。 那么就将序列分成mm段,每一段用一个ST表来维护区间矩阵乘积 然后注意一些细节,比如mm段分段如果两个不周期位置连续,以及最后一个段等等。想法还是比价明显的,但是确实不好写….#include<bits/stdc++.h>using namespace std;const int MAXN=50005;int MOD;st

2015-09-07 08:19:20 686

原创 GYM 100685 K

乱搞题 统计每一个不是magic word的单词,然后每个make_pair 然后按照公式计算答案。 因为这里是乱序的统计make_pair的情况,所以如果相邻的是相同的就会多统计一倍,在计算答案的是就要去掉,如果你保证字典序小的在前面,那就无所谓啦。// whn6325689// Mr.Phoebe// http://blog.csdn.net/u01300

2015-09-01 17:00:07 504

原创 GYM 100685 G【并查集】

一开始看题就水了一发bitset,本地是没有什么问题,但是交上去果断地MLE了。那么就想到乱搞,假设将其变成一颗有根树,如果dfs的时候走的是正的边,就在正的并查集里面merge,如果走的是负的边,就在反的并查集里面merge。对于一个查询,查询一下他们的LCA,如果他们的LCA,在u(或者v)正的并查集中,在另一个反的并查集内,那么就是可以访问,否则不行。大家可以脑补一下图像,必然是这样的。#in

2015-09-01 16:53:16 546

原创 GYM 100685 J【交互题】

俄罗斯的人经常出一些交互题,比如强制离线之类的题目 这题是二分+交互 对于每一盏灯ii,我们假设前面的灯位置都排好了位置,那么就二分那些这一盏灯所在的位置,询问的次数是nlog(n)nlog(n)次。 另外如果死循环的话,那就是没有方案,设置一个cnt上限来判断死循环。// whn6325689// Mr.Phoebe// http://blog.csdn.n

2015-09-01 16:41:26 1282

poj第1200题

北京大学在线测评网站POJ第1200题的解答,已经AC通过

2013-11-30

空空如也

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

TA关注的人

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