- 博客(23)
- 资源 (9)
- 收藏
- 关注
原创 Codeforces Gym 100971M Decomposition into Good Strings DP+数据结构
题目大意:定义有k个不同的字符的字符串为好字符串。现在给出一个字符串,求解对该字符串的每个前缀Si至少是多少个好字符串的连接,若不能由好字符串连接而成则输出-1。 例:k = 2 abac至少是ab和ac这两个好字符串的连接。 字符串长度<=2e5做法:一个比较直观的dp方程是这样的 f[i]表示Si的答案 f[i] = min(f[j] + 1) (j < i且Sj + 1…i是好字符串
2016-05-15 11:45:43 1133
原创 POJ 2010 Moo University - Financial Aid (优先队列/二分答案)
题目大意:从c个物品中选出n(奇数)个物品,使得这n个物品的价值中位数尽量高,且总价格不超过f。做法1:把物品按价值排序half表示n/2向下取整low[i]表示前i - 1个物品中价格最小的half个物品的价格和hei[i]表示i之后的物品中价格最小的half个物品的价格和low和hei可用优先队列维护枚举中间物品即可代码 NKWBTB Accepted 2592KB
2016-03-06 16:38:00 1365
原创 Codeforces Gym 100379L Game with a string 博弈+交互题
题目大意:有26堆石子,你可以选其中的若干堆取走每个选定堆中的一颗石子,没法取的人失败。你需要选择先手和后手,然后与程序交互,给出必胜的方案。做法:我们先看只有一堆的情况,如果这一堆中的石子数为偶数,那么先手必败,反之如果是奇数,那么先手必胜;我们可以推广到26堆的情况,如果不存在奇数堆的石子那么先手必败,否则先手必胜。至此,我们得到了一个最优方案。如果不存在奇数堆的石子那么我们选则后手,否则
2015-09-06 14:31:17 2020
原创 Codeforces Gym 100203D Different vectors 最小表示法
题目大意:有一组序列,询问有能分成几组使得每一组中的序列都互成双射做法:将每组序列接成环把每一个元素替换成上一次该元素出现的位置与现在的位置的距离将新的序列做一遍最小表示法将最小表示的序列加到set中最后答案即为set的大小代码: 12548936 2015-08-15 17:29:14 NKWBTB D - Different vectors GNU C++
2015-09-06 14:11:46 760
原创 URAL 1779 The Great Team 构造题
题目大意:要求构造一个n个点的无向图,使得不存在>=3个点的度数一致构造方法:这题有很多构造方法;既然不存在>=3个点的度数一致,那么我们使得相同度数的点都只有2个;不妨画一画观察一下 -我们值观察4、6、8的构造的话会发现,如果我们4个一组,每个组中的最后两个点连一条边,然后最后这两个点分别隔一个点向前面的点各连一条边,这样就形成一组合法的构造方案。因为它使前面的点的度数都增加了1,同时
2015-09-06 13:48:12 997
原创 Codeforces Gym 100345A BibTeX 模拟
题目大意:给一个BibTex的代码,要求你将引用格式化Sample:Input@book { author = “Donald Ervin Knuth”, title = “The Art of Computer Programming”, volume = “1”, publisher = “Addison-Wesley Professional”, year = “1997” }
2015-09-06 13:10:01 713
原创 Codeforces Gym 100345H Settling the Universe Up Bitset+倒推
题目大意:给一个只从标号小的点向标号大的点连边的有向图(n<=200)。有如下几种操作: ? u v(询问u能否到v) + u v (加一条u到v的边) - u v (删除u到v的边) 以上操作保证u做法:用bitset维护每个点能到的点对于每一次?操作可以O(1)O(1)回答对于每一次修改操作从后往前推暴力重构bitset并统计答案,时间复杂度O((n+m)∗n)O( (n+m)
2015-09-06 12:50:55 691
原创 Codeforces Gym 100342F Move to Front 平衡树
题目大意:有一个链表其中的元素为1->2->3->4->…….->INF,每次询问一个元素在链表中的位置,然后把该元素放到链表的首位置。做法:beta version如果输入数字不大,那么我们可以直接先把1到最大数字打上时间戳加到平衡树(按时间戳从新到老排序)里面去;每次询问,就询问时间戳在平衡树中的rank即可;在平衡树中删除该时间戳,将该数重新打上一个新的时间戳加入到平衡树中即可(相当于移
2015-09-06 11:53:38 1313
原创 Codeforces Gym 100342H Hard Test 构造
题目大意:你需要造一个n个点m条边的有向图,使得所有点都能被1访问到,且dijkstra算法在该图上更新次数最多。为避免麻烦,你的构造方案应当使得每次更新后没有vis的有最小的dis的点只有一个(dis和vis都是dijkstra算法中的意义)。胡扯:这道题构造方法有很多种,我是用的最无脑的那一种做法:注意到,要使得dijkstra更新次数最多,那么就是使得每一条边被枚举到的时候都进行一次有效更
2015-09-06 11:28:42 687
原创 Codeforces Gym 100342J Triatrip Bitset+枚举
题目大意:给一个有向图(n<=1500),问有多少个三元环。做法:用bitset保存每个点能到的点以及能到某个点的所有点对每个点(记为U)逐一枚举,再枚举该点能到达的点(记为V)将能到U点的bitset与V能到的点的bitset取交集,答案+=交集大小最终答案÷3即可时间复杂度O(n3)O(n^3),但是bitset将常数除以了32所以足够通过本题。 4543664 WHU_FFT
2015-09-06 10:50:01 823
原创 Codeforces Gym 100341I Hungry Queen 2 Set+模拟
题目大意:在一个无穷大的棋盘上有一个皇后在(0,0)点,皇后可以上下左右或者沿对角线移动。有n个卒,皇后要按卒的输入顺序吃卒,每次移动必须吃掉一个卒,皇后不能跳过卒。问皇后最多能吃掉几个卒?做法:先将所有卒的位置(x、y、x+y、x-y)离散化;用set分别记录,在同一行(按y排序)、同一列(按x排序)、同一对角线的卒;模拟皇后的移动,每次在当前位置与下一个卒的位置所确定的set中查找下一个卒
2015-09-06 10:32:19 801
原创 HDU Boring counting 4358 莫队算法
题目大意:给一颗N个节点的树,每个节点上有一个颜色。给出Q组询问,每次询问一个子树上恰好出现K次的颜色的个数。做法: - 将树DFS一遍,记下时间戳,得到每个子树dfs序的对应区间,并将颜色离散化。 - 记下每个询问,将询问子树变成询问区间,将区间左端点除以n−−√\sqrt n排序,在同一块的询问按右端点排序。 - 接着按莫队算法移动区间,得到对应答案。 1435
2015-08-29 10:10:12 851
原创 堆优化Dijkstra
非映射堆版:#include <bits/stdc++.h>using namespace std;const int maxn = 20000 + 5;long long d[maxn];int vis[maxn];int n , m;struct Pri{ int v;long long c; Pri(){} Pri(int _v , long long _c
2015-08-28 11:57:49 761
原创 URAL 1774 Barber of the Army of Mages 网络流
题目大意:有N个烙饼,一个平底锅最多可以一次放K张饼。一个饼正反面都需要烙,烙一个面至少需要一个单位的时间。第i个饼会第ti时间送到厨房,要是在si时间内还没有烙好,顾客就会投诉。问存不存在一种烙饼方案,使得所有饼都按时烙好。存在则输出Yes,并输出每个饼的下锅时间和出炉时间,不存在则输出No。这题一乍一看还以为是贪心,遗憾的是WA了。听了题解顿悟是网络流。 建图是这样的,对于每一张饼,与它所有能
2015-08-27 23:08:33 712 1
原创 HDU 5305 Friends DFS
题目大意:给一个n(1≤n≤8)个顶点,m条边的无向图,要求给边进行黑白染色,使得对于每一个顶点,黑边数=白边数,求方案数。一个很直接的想法是DFS,枚举边的颜色,然后检查答案,但是边数最多有28条,直接做是会超时的,需要做几个优化:首先每个顶点如果有M条边,如果M-1条边的颜色确定了那么第M条边肯定也确定了。如果存在度为奇数的点,那么显然答案是0的。对于第一个优化,我们发现,如果枚举边不太好
2015-08-26 09:59:29 714
原创 HDU 5371 Hotaru's problem Manacher+Set
题目大意:给一个序列,求一个最长的子区间,满足一下条件区间长度为3的倍数将区间均分成三部分,第一部分等于第三部分,第二部分是第一部分镜像翻转例:2 3 4|4 3 2|2 3 4就是一个合法的序列通过观察我们知道,题目中合法的序列实际上就是一个有重叠部分的双回文串(上例中以|表示回文中心),那么可以得出一个暴力的方法那就是,枚举回文中心,然后向左右延伸,延伸过程中遇到满足要求的回文中心就更新
2015-08-25 09:26:10 606
原创 HDU 5381 The sum of gcd 离线处理+线段树
题意:给一组序列,多次询问,每次询问f(l,r)=∑ri=l∑rj=igcd(ai,ai+1....aj)f(l,r)=\sum_{i=l}^{r}\sum_{j=i}^{r}gcd(a_i,a_{i+1}....a_{j})最初在赛场上看到这道题的时候,就想离线处理,但是怎么也不会。原因是当时并不知道这题的一个性质:从一个下标为i的数向后的连续区间[i,i+1]、[i,i+2]...[i,n][i
2015-08-24 10:56:33 935
原创 HDU 5374 Tetris 俄罗斯方块 模拟
这道题是喜闻乐见的大模拟题。题目大意:在一个9X12的格子中玩俄罗斯方块,给定所有可能的方块形态,给定方块的掉落顺序,给定操作,w表示旋转,a表示左移,b表示右移,d表示下落一格(实际下落两格),p表示pass(即下落一格),输入数据保证不会GameOver,求最后的分数。题意虽然简单,但是由于编程复杂度等众多原因,考场上写的人不多。这里有几个可以简化代码的trick,由于旋转最大循环节为
2015-08-23 10:03:29 1692
原创 HDU 5412 区间第K值 带修改 树状数组套平衡树
题意:给定一个序列,两种操作:1、求修改第i个数为Vi;2、求区间[L,R]第K大的值。2015多校练习赛的一道题。因为是经典题所以很多人都直接把模板敲上去了,然而通过率却惨不忍睹。我也是直接套以前写的程序的SB之一。然而分块时间复杂度太高并不能通过本题(分块做法见:http://blog.csdn.net/nkwbtb/article/details/21639647)于是愉快的TLE了。考
2015-08-22 21:42:59 1011
原创 可并堆——左偏树 Leftist Heap
今天学习了左偏树,这是一个好理解而且好写的数据结构,和二叉堆一样可以在O(1)时间内取出优先级最高的值,O(logn)时间内删除优先级最高的值,不同的是如果要合并两个堆那么二叉堆就只能跪了。而左偏树能在O(logn)的时间内实现两个堆的合并。左偏树有两个重要的性质,1、树中每个元素小于或大于其父亲节点的值(堆性质)2、定义节点的距离为当前节点向下到叶子节点最少所需的边数,叶子节点的距离
2014-03-24 11:23:14 2802 3
原创 Noip 2013 Day1 T3 货车运输 启发式并查集树
题目大意:给一个图,求最大生成树,询问生成树上两个结点路径上最小的边权,若两点不可达输出-1。这道题是很明显的LCA问题可以倍增写(详见http://blog.csdn.net/nkwbtb/article/details/21880941),但是我今天看了看题解,惊奇地发现了一种极其美妙的做法。就是启发式并查集树。名字听起来非常高大上,实际上很简单,启发式并查集,就是维护每个集合
2014-03-23 20:20:56 2220
原创 【LCA】最近公共祖先问题Lowest Common Ancestors
昨天集训出了一道LCA的题目,我只会写暴力然后不知道为啥崩栈了,然后想起了去年NOIP Day1 T3 也是不会LCA就废了,然后就没有然后了.....于是我今天学习了各种LCA的做法。LCA:对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。——百度百科举个例子:3和4节点的LCA就是2,2和6号节点的LCA
2014-03-23 19:58:30 1892
原创 区间第K值带修改 分块
区间第K值带修改Q:给定一个序列 1、查询一个L到R的区间内的第K大(小)值。2、修改一个值。这道神题困扰了我很久,直到学了各种各样的算法才会会这道题。先比较一下流行的算法的效率吧对于一个长度为N的序列暴力:对于一段查询区间每次进行快排。时间复杂度:单次查询:O(NlogN)修改:O(1)空间复杂度:O(N)线段树套平衡树:单次查询:O(log^3 N)
2014-03-21 13:34:01 3439 1
直方图图象检索 Python
2018-02-27
对时程序DEMO Python
2018-02-27
哈夫曼编码 C++
2018-02-27
易语言初学者程序包!!!
2011-03-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人