自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

穹妹的家

In solitude , where we are least alone.

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

原创 “玲珑杯”ACM比赛 Round #4

运气不错有个抱枕。 1046 - chess play题意:一个n*m的数组,初始全部是’.’,然后3种操作,把一个位置变成’w’,或者把一个位置变成’r’,或者交换两行。思路:vector的swap是O(1)的,直接模拟就行。//// main.cpp// chess play//// Created by 翅膀 on 16/11/5.// Copyright © 2016年

2016-11-06 10:59:43 1394 3

原创 Technocup 2017 - Elimination Round 1 (Unofficially Open for Everyone, Rated for Div. 2) 解题报告

A. Transformation: from A to B题意:一个数a,两种操作,一是把a*2,二是把a*10+1,问把a变到b是否有解和最小次数。思路:两种操作都是指数级别的,爆搜即可。//// main.cpp// 727A//// Created by 翅膀 on 16/10/21.// Copyright © 2016年 kg20006. All rights rese

2016-11-04 20:43:56 961

原创 codeforeces722 Intel Code Challenge Elimination Round (Div.1 + Div.2, combined)

终于补完这场了。C. Destroying Array 题意: 给一个数组a,长度为n,然后给一个1~n的排列p,依次毁灭apia_{p_i},问每次去掉后数组的最大连续子段和(当然是不能包括毁灭的位置)。 思路: 倒过来看就是每次加一个元素问最大子段和,并查集可解。//// main.cpp// 722C//// Created by 翅膀 on 16/10/1.// C

2016-10-12 11:33:38 605

原创 [树链剖分] HDU 5893 List wants to travel

List wants to travel题意:给一棵树,每条边有个颜色,两种操作:Change a b c,把a到b的简单路径的边颜色变成cQuery a b,查询a到b的简单路径有多少段颜色,连续相邻的同色边算一段。思路:先建立树剖然后用线段树维护,记录一个区间内的颜色段数,最左颜色和最右颜色,然后就可以区间合并了,需要注意合并的顺序,没想清楚很容易就wa了,我想的是总是按查询的时间顺序把区

2016-09-20 19:52:13 530

原创 [AC自动机+期望DP] 玲珑ACM 1025 - Magic boy Bi Luo with his excited string problem

Magic boy Bi Luo with his excited string problem题意:给出<=15个字母串,每个串不超过10个字符,然后一个人开始写字母,每次随机写一个字母,直到出现给出的任意一个串,然后就停止,问写的长度的期望,答案mod 1e9+7。思路:总共150个字母比较少,用ac自动机建立转移矩阵,dp[i]dp[i]表示从状态i出发写的期望,然后套高斯消元解方程。 每个

2016-09-17 10:21:16 501

原创 [burnside引理] HDU5868 Different Circle Permutation

Different Circle Permutation题意:n个球围成一个圈,每个球是白色或黑色,要求不能有连续的黑球相邻,并且旋转同构,求有多少种合法方案。思路:设不考虑旋转同构时,nn个球的方案为f(n)f(n),手算下f(2)=3,f(3)=4,f(4)=7f(5)=11f(2)=3,f(3)=4,f(4)=7f(5)=11,好像有点f(n)=f(n−1)+f(n−2)f(n)=f(n-1)

2016-09-15 18:56:19 804

原创 [后缀自动机] HDU5558 Alice's Classified Message

Alice’s Classified Message题意:给一个串s,给一个加密过程,输出密文,过程如下: 初始i = 0,重复下面直到串结束。 找一个子串,第一个字符位于[0,i),而且该子串要和以i开头的相同长度的串相等,多个合法的取最长的,如果还有多个取最左边的,设该字串长度为k。 如果不存在,输出 -1和s[i]的ascii值,i增加1。 否则输出长度k和第一个字符的位置T,i增加k

2016-09-11 20:17:41 602

原创 [树上背包] POJ2486 Apple Tree

Apple Tree题意:一棵树n(<=100)个节点,每个节点有a[i]个苹果,从1出发走k(<=200)步,问最多能得到多少个苹果。思路:首先想到每个节点只有3种情况,要么不经过,要么经过了最后回来,要么经过了最后不回来,只用关心后两种就行。 于是可以想到一个dp[i][j][k],表示从i出发走j步,k=0表示回来,k=1表示不回来,现在想怎么转移。 转移的关键是每个子节点走多少步,暴力枚

2016-09-09 15:11:57 1228

原创 [dsu] CSU1811: Tree Intersection

1811: Tree Intersection题意:给一棵树,每个节点有种颜色,考虑第ii条边(ai,bi)(a_i, b_i),把这条边去掉后,分成两颗树,问两颗树节点的颜色集合的交集。题解:如果对每棵子树暴力,显然是O(n2)O(n^2)的,但可以发现子树的信息有一部分父亲节点可以复用,保留这一部分信息就成了O(nlogn)O(nlogn),也就是保存重儿子的信息。//// main.cpp

2016-09-05 19:23:11 989

原创 [上下界最小流] SGU 176. Flow construction

176. Flow construction题意:从1到n的一个网络,每个边有上下界,求最小流。思路:属于有源汇上下界的最小流问题,总结下。原网络每条边的容量为CMax−CMinC_{Max}-C_{Min},同时记录每个点的下界流量,流入为正,流出为负,记为flow[i]flow[i]。建立每个点和ssss及tttt之间的边,若flow[i]>0flow[i]>0,连接ssss和ii,容量为f

2016-09-02 16:11:29 481

原创 [上下界网络流] SGU 194. Reactor Cooling

194. Reactor Cooling题意:给一个无源汇上下界网络求一个可行流。思路:基本是模板题了,这个论文说的很清楚。 主要学习这种建图方法和思路。#include<bits/stdc++.h>using namespace std;const int N = 5005;const int M = 130005;const int inf = ~0u>>2;struct eg{

2016-08-31 20:26:11 425

原创 [虚树dp] bzoj2286: Sdoi2011消耗战

Sdoi2011消耗战题意:给一棵带权树,1为根,q次询问,每次询问给出k个特殊点,要求去掉一些边,代价是权值,让点1不能到达k里的任意一个,输出最小代价。题解:首先考虑单次询问,容易想到dp[x]表示让1不能到x子树里的特殊点的代价。 当x是特殊点的时候,显然有dp[x]= min(path[x]),表示x到根节点的最小的那条边,因为一定要去掉x。 当x不是的时候,dp[x]=min(path

2016-08-30 17:09:45 493

原创 [基环] codeforces 711D. Directed Roads

Directed Roads题意:给n个点,和P[i],表示从第i个点到P[i]有一条有向边,每条边可以至多翻转方向一次,问有多少种方法翻转后没有环。思路:n个点n条边,无自环,每点出度为1,这个模型应该也出过很多次了。 这个图要么就是一整个环,要么就是一个环加一棵树,要么就是前面的复制几次。 考虑一个连通块,将它分为环上的边x和环外的边y,可以看出环外的边随便翻转都不形成环,所以任意翻转,答案

2016-08-30 14:39:58 427

原创 [二进制分组+AC自动机] HDU4787 GRE Words Revenge

GRE Words Revenge题意:一个01字符串机器,两种操作:+String 表示增加String串进机器里?String 表示查询String串有多少个子串在机器里面要求强制在线,给出的串要循环左移lastans次。lastans是上次查询的答案。思路:若没有增加操作,可以看出这是个AC自动机的裸题,于是就采用《浅谈数据结构的几个非经典解法》论文中说的二进制分组,巧妙的用一个log的

2016-08-23 20:53:48 1157 2

原创 [二维树状数组] codeforces 707E. Garlands

E. Garlands题意:一个n∗m(<=2000∗2000)n*m(<=2000*2000)的矩阵上,给出k(<=2000)k(<=2000)条链,每条链长度len(<=2000)len(<=2000),保证相邻两个的四边有一边相临,链上有个开关,初始所有链为开,开的时候链上每个点有权值,关的时候权值为00。 然后有q(<=106)q(<=10^6)个操作,分两种:SWITCH i,按第i条

2016-08-22 12:39:50 1348

原创 [可持久化线段树] codeforces 707D. Persistent Bookcase

D. Persistent Bookcase题意:一个n∗mn*m矩阵AA,维护4种操作:1 i j:把第A[i][j]A[i][j]赋值为12 i j:把第A[i][j]A[i][j]赋值为03 i:把A[i]A[i]的0变1,1变04 i:回到第i个操作之后的状态数据保证合法。思路:一维的话就主席树就好啦,二维的话就主席树套主席树就好啦。 不过空间有点多,于是动态开点。 注意到这题

2016-08-21 15:22:43 842

原创 [高斯消元] HDU 5755 Gambler Bo

Gambler Bo题意:给一个n*m的矩阵,元素值为{0,1,2},每次操作选择一个元素(i,j),把该元素值加2,并把上下左右的值加1,所有值mod3。 要求输出一种操作序列,让所有值变为0。分析:每个值操作3次就相当于没操作,每个元素的操作次数设一个未知数,列一个n*m 行n*m+1 列的模3线性方程组,套上高斯消元,然后就过了。 一看复杂度O(T*n^3*m^3),比赛的时候告诉队友肯定

2016-08-21 15:11:29 431

原创 [HDU5790] Prefix 字典树+主席树

Prefix题意:给出总长105的N个串10^5的N个串,给出q个询问q个询问,查询编号[l,r][l,r]范围内的串有多少个不同的前缀,编号从11开始。思路:对于第ii个串,用主席树记录0−i0-i个串有多少不同的前缀,这个用字典树可以方便的算出,字典树的任一个节点都代表一个前缀,所以第ii个串新增的前缀就是length(i)−这个串的被标记过的节点length(i)-这个串的被标记过的节点。

2016-08-21 15:09:06 526

原创 [DP] HDU5819 Knights

Knights题意:t数轴上有n个骑士位于1,2,3,...n1,2,3,...n,移动速度相同,初始移动方向已知,当两个骑士相遇时,各有50%的概率赢,输了就死了,并且移动到0和n+1的位置时移动方向会翻转,问最右的骑士存活的概率。思路:DP[i][j]DP[i][j]表示前ii个骑士有jj个向右走,因为速度相同,所以不存在追及的情况。 如果第i个骑士开始往右走,显然有转移:DP[i][j]=D

2016-08-10 19:42:01 976

原创 [数据结构] HDU5812 Distance

Distance题意:维护一个集合,有三种操作.插入 x删除 x设y属于集合,给定x,找出f(y,x) = z,最小的z其中f(y,x)定义为每次乘上或除上一个素数,把y变成x的最小操作次数。思路:可以看出f函数的值就是x和y的对应质因子的个数差的总和,一个暴力一点的思路就是遍历x的所有约数,在集合中查询有这个约数的数的答案,再考虑下其实用一组multiset,multiset[k]表示有k

2016-08-10 12:30:12 641

原创 [线段树] Chef and Array

CHEFLKJ: Chef and Array 题目描述 大厨喜欢序列和有关序列的一切。他称一个序列 V 是支配的,当且仅当存在一个数字 x(即“支配者”)其在序列中的出现次数严格超过序列长度的一半(即 ⌊|V |/2⌋)。 他的朋友 Dmytro 想让大厨开心,因此他给大厨呈现了这道有趣的题目: 给定序列 A,你需要处理 Q 个询问。询问分为两类: • 1 x y:令序列的第 x 个元素

2016-07-25 10:54:41 383

原创 [分治fft] hdu5730 2016多校第一场1008 Shell Necklace

题意: 由nn个点组成的串,要装饰所有点,装饰连续ii个点的方法有a[i]a[i]种,要求每个点恰装饰一次,问有多少种装饰方法。 题解: 容易想到dp,令dp[i]dp[i]表示装饰前i个点的方法,那么转移如下: dp[i]=∑l=1i−1dp[i−l]∗a[l]dp[i] = \sum_{l=1}^{i-1}dp[i-l]*a[l]关于卷积和fft网上的资料很多了,比如这篇的第三点,这里说

2016-07-20 21:40:50 1174

原创 [搜索] LightOj 1165 - Digit Dancing

Digit Dancing 题意: 给你8个数,他们的绝对值组成一个1~8的一个排列,每次操作允许找到同时满足下列情况的两个数ai,aja_i,a_j,把ai放到aj的任一侧a_i放到a_j的任一侧,或者把aj放到ai的任一侧a_j放到a_i的任一侧:ai,aja_i,a_j两个数一正一负abs(ai)+abs(aj)abs(a_i)+abs(a_j)是素数问最少操作几次让这8个数按绝对值

2016-06-26 18:00:49 497

原创 [AC自动机+DP] bzoj 1030: [JSOI2007]文本生成器

1030: [JSOI2007]文本生成器 题解: 在只有大写A-Z的情况下,给出n个单词,每个单词长度<=100,再给出一个长度m<=100,求所有长度为m的串中至少包含1个给出单词的串的数量。 题解: 建立ac自动机跑两遍dp。利用ac自动机可以求出不包含任意单词的串的数量。 因此先不加入任何单词,跑一遍dp,这样就知道了任意情况下串的总数。 然后加入所有单词,跑一遍dp,这样就知道

2016-06-08 11:05:57 455

原创 [dsu] codeforces 375D. Tree and Queries

题意: 给出一棵树,1是根节点,n个节点,每个节点有一种颜色。 有m次询问,每次询问给出v k,求以v节点为根的子树中有多少种数量至少为k的颜色,一种颜色的数量就是该颜色的节点的数量。 题解: 离线,回答以v为根的询问时,如果暴力把整棵子树的颜色存进树状数组,复杂度是O(n2logn)O(n^2logn)。 但是子树信息可以保留到父节点继续使用,如果要保留子树信息的话,容易发现处理两棵子树

2016-06-06 20:04:47 1350

原创 [费用流] HDU1853 Cyclic Tour

Cyclic Tour题意: 给一个带权有向图,要求找出若干个环,每个点必须唯一包含在一个环内,要求所有环上边权值总和最小,求权值总和,无解输出-1。 题解: 每个点必须包含在一个环内,换句话说就是任意点的出度=入度=1。 于是拆点,左点表示出,右点表示入,跑出费用流,判断是不是所有点都是出度等于入度等于1。#include<bits/stdc++.h>using namespace st

2016-06-02 21:10:05 367

原创 [组合数+bell数] codeforces 569D. Symmetric and Transitive

D. Symmetric and Transitive 题意: 一个集合SS有nn个元素,问它上面的二元关系的数量,要求二元关系满足对称性和传递性,不满足自反性。 题解: 学过离散应该知道,二元关系就是笛卡尔积S×SS×S的子集。 开下脑洞可以想象一个nn节点的有向完全图,并且对任意节点我们加上一个自环,任意边的组合就是一个关系,可以看出只要一个关系包含了所有自环,那么这个关系就有自反性。

2016-05-31 22:37:56 737

原创 [数学] codeforces 676E. The Last Fight Between Human and AI

题意: 一开始有一个多项式P(x)=an∗xn+an−1∗xn−1+⋯+a1∗x+a0P(x)=a_n*x^n+a_{n-1}*x^{n-1}+\dots+a_1*x+a_0 系数未知,人和电脑轮流最优确定一个系数,问最后能不能使P(x)=B(x)∗Q(x)P(x)=B(x)*Q(x)成立,电脑先走。 其中Q(x)=x−kQ(x)=x-k,kk是已知常数。 输入不一定会给出初始局面,也可能给

2016-05-26 11:21:23 1045

原创 [dfs序+线段树] codeforces 343D. Water Tree

题意: 给出一棵树,节点权值为true或者false,初始每个节点权值为false,维护两种操作。形如1 x:把x节点及其子树的值赋为true。形如2 x:把x节点及其到根节点的祖先赋值为false。形如3 x:问x节点的值。题解: 由于要对子树进行操作,先求出dfs序,用线段树即可快速维护子树。 然而发现还要对祖先操作,dfs序对子树和祖先显然不能同时维护。 稍微转换下思路,要维护

2016-05-25 21:16:02 851

原创 [DP] codeforces 650D. Zip-line

题意:给一个长度为n的序列aia_i,有m个询问,一次询问给出pos,valpos,val,问假如把aposa_{pos}变成valval,序列的最长上升子序列的长度(设为lislis)是多少,注意询问不会改变原序列。题解:把a_{pos}aposa_{pos}变成valval之后,通过思考可以发现单次询问时有两种情况,第一种是答案的lislis中使用了valval,第二种是没有使用。 首先考虑使

2016-05-12 18:09:30 826

原创 [线段树] codeforces 558E. A Simple Task

题意: 给一个长度n的字符串,q次操作,每次操作把[l,r]排序,k=0非递增,k=1非递减。 题解: 采用计数排序的复杂度是O(n∗q)O(n*q),无法通过,但有所启示。 可以看出计数就是区间求和,排序就是区间更新,可以用线段树维护。 做法是建立26棵线段树,第i棵树维护第i个字母的位置信息。 计数时,在26棵线段树内分别做一次查询,排序时根据递增还是递减,把相应的区间赋值为相应的字

2016-05-09 16:44:00 1157

原创 [斜率优化DP] codeforces 673E. Levels and Regions

题意: 要把1~n1~n分成kk组,每组内的数必须连续,组与组不相交且每个数必须属于一个组,并且任意ii有一个参数tit_i。 如果[l,r][l,r]为一组,那么从ll走到l+1l+1的概率是tltl\frac{t_l}{t_l},从l+1l+1走到l+2l+2的概率是tltl+1+tl+1tl+1\frac{t_l}{t_{l+1}}+\frac{t_{l+1}}{t_{l+1}},依次类推

2016-05-08 18:08:14 2027

原创 [斜率优化] codefores 660F. Bear and Bowling 4

F. Bear and Bowling 4 题意: 给一个序列valval,任选连续的一段[l,r][l,r],其价值为∑rj=lval[j]∗(j−l+1)\sum_{j=l}^{r}val[j]*(j-l+1),求最大价值 。 简单的说就是可以去掉这个序列的某前缀和某后缀,然后对新得到的valval求ans=∑val[i]∗ians=\sum val[i]*i ,最后求max(ans)ma

2016-05-06 17:06:24 1293

原创 [CDQ分治] codeforces 669E. Little Artem and Time Machine

题意: 要你维护一个带时间戳的multiset,有三种操作。 - 形如:1 a b ,在第a秒插入1个b。 - 形如:2 a b ,在第a秒删除1个b。 - 形如:3 a b ,查询当前在a秒时有多少个b。 需要注意输入有顺序,multiset自己也有时间戳。 题解: 感觉CDQ可以做,2维的,写了一发然后AC了,第一次独立写CDQ。#include<bits/stdc++.h>

2016-05-04 18:45:58 1048 1

原创 [最短路应用] ZOJ 3946 Highway Project

题意: n个点(0~n-1),m条边,每条边有两个权值,一个是时间,一个是花费,其中0是首都,要让0点到其他所有点的总时间最短,同时要让花费最小。 二重限制的最短路,稍微改一下即可。关于正确性的一些思考: 首先dijkstra跑单源点多汇点最短路,其路径图可以不存在环,因为源点到任意一点可以只需要一条路径。 (?)正确性存疑。对prim算法有一点理解的话,容易发现dij和prim本质和过程都无比

2016-05-03 15:17:41 581

原创 HUTACM2016 MST练习·解题报告

专题链接A - 还是畅通工程题解: n个村,m条路,要用最少的钱把所有村连接起来,MST的模板题,提供两种算法模板。//使用Kruskal算法#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;const int N = 105;int seed[N]; //构建并查集int find_ro

2016-05-02 22:48:46 4126 2

原创 [思维] codeforces 665D. Simple Subset

题意: 给一个n个正整数序列aa,要找一个最大的子序列,使子序列里任意两个元素之和都是素数,要输出这个子序列的大小和子序列的元素。 1<=n<=100001<=n<=10000 1<=a[i]<=1061<=a[i]<=10^6 题解: 设一个满足要求的子序列为AA。 如果|A|<3|A|<3,那么只需用n2n^2的暴力即可。 如果|A|>=3|A|>=3,设a,b,ca,b,c为AA

2016-04-21 13:55:11 663

原创 [概率DP] Topcoder SRM687div2 1000 Queueing

题意: 两列队伍,左边有len1len_1个人,右边有len2len_2个人,问事件左边没人但右边有人的概率。 两边收银员各有一个经验值参数pp,F(p,k)=(1/p)/(1−1/p)k−1F(p,k)=(1/p)/(1-1/p)^{k-1}表示经验值为pp的收银员恰好花费kk秒完成一次收银的概率。 题解: 首先发现F(p,k)F(p,k)十分眼熟,满足几何分布,所以每秒成功收银的概率是1

2016-04-15 21:58:09 488

原创 [单调队列DP] HDU3401 Trade

Trade 题意: 炒股,给出第1~t天每天的买入价格Ap[i]和卖出价格Bp[i],每天最多能买入的数量As[i]和最多能卖出的数量Bs[i]。 还有几个限制,任意时刻最多持有Pmax数量的股票,两次交易(买入或卖出)间隔至少w天,如第i天交易,那么下次至少是i+w+1天。问你第t天最大收入。 题解: 首先考虑朴素DP。 令DP[i][j]DP[i][j]表示第i天持有j股票时的最大收

2016-04-13 20:55:21 561

原创 [尺取法] CF660 C.Hard Process

C. Hard Process 题意: 给一个01串,最多可以把k个0变成1,求最长连续1的长度,并且要输出最后的串。 题解: two pointers尺取,O(N)O(N)。#include<bits/stdc++.h>using namespace std;const int N = 3e5+5;int num[N];int main(){ int n, k; s

2016-04-10 17:55:24 707

空空如也

空空如也

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

TA关注的人

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