自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(494)
  • 资源 (1)
  • 收藏
  • 关注

原创 CodeForces 813A|813B|813C|813D - 搜索|DP

CodeForces 813813C - 树上搜索并分析题目利用条件

2017-06-09 19:51:10 567

原创 CodeForces 182D(#117)|Common Divisors|KMP求循环节

题目大意给出s1和s2,求两字符串公共循环节个数。题解求最小循环节的方法: http://blog.csdn.net/huanghongxun/article/details/53213871 注意到循环节只有最小的和由最小的重复几次组成的。 所以先求出两串的最小循环节,并判断是否一致,如果不一致就不可能有公共循环节。 如果一致,那么求出两串的循环次数,那么两次数的公共因子的个数就是循环节个

2016-11-18 12:00:01 755

原创 HDU 3746|Cyclic Nacklace|KMP求最小循环节

题目大意给定字符串,问最少在末尾加多少个字符就可以让字符串存在循环节(循环节出现次数>1)。题解分析KMP的next数组,next[n]指最长的那个字符串是该字符串的前缀和后缀(但不是整个字符串)。情况1:那么如果类似ABCDABKKABCDAB这种情况,next[n]就指ABCDAB的长度=6。那么我们再补2个KK就可以了,最小循环节ABCDABKK=8,是(原长14)-6=8。 ABCDABK

2016-11-18 10:54:39 482

原创 CodeForces 432D|Prefixes and Suffixes|KMP|动态规划

题目大意求s的不同长度的既是s前缀又是s后缀的子串的个数题解考虑KMP的next数组。 因为next[j]表示lcp(s[1..j],s[1..k])(k<j)lcp(s[1..j],s[1..k])(k<j)。 故s[1..j]与s[1..next[j]]的关系是后者是前者的最长后缀,由于是最长,所以肯定不会漏情况,因此后者的出现次数是前者的出现次数+1(前者最后一次出现的后缀)。。。。。。。

2016-11-18 00:35:54 671

原创 CodeForces #379(734A|734B|734C|734D|734E|734F)|二分查找|模拟|树的半径|位运算

734A: Anton and Danik题目大意给定字符串中,D多输出Danik,A多输出Anton,一样多输出Friendship题解#include <cstdio>char s[100005];int main() { int n, i, d = 0, a = 0; scanf("%d%s", &n, s); for (i = 0; i < n; ++i)

2016-11-16 17:58:43 1884

原创 CodeForces #179(295A|295B|295C)|动态规划|最短路径|前缀和

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I

2016-11-13 23:57:23 483

原创 CodeForces 652E|Pursuit For Artifacts|边双连通分量|缩点

include include include using namespace std;define FOR(i,j,k) for(i=j;iconst int N = 300005, M = 2 * N;struct Graph { int h[N], p[M], v[M], w[M], val[N], dis[N], vis[N], cnt = 0

2016-11-12 18:44:35 750

原创 CodeForces #363(698A|699C|698C|699E)|动态规划

698A|699C - Vacations题目大意你一天可以选择去锻炼或打比赛,但你不能连续2天都锻炼或打比赛,你还知道某天是否有比赛、体育馆是否开门。问你最少没事干的天数。题解#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define FOR(i,j,k) for(i=j;i<=k;+

2016-11-07 23:08:43 779

原创 CodeForces #367(706C)|动态规划

706C - Hard Problem题目大意有一列字符串,你可以翻转一些字符串使得这一列字符串按字典序排列(翻转操作代价cic_i)。问最小代价。题解很多dp题喜欢披着字符串的羊皮啊。。 要注意到的是相等也是满足字典序的QwQ。 注意到字典序排列满足无后效性,故考虑DP。 令dp[i][0]dp[i][0]表示不翻转第i个字符串时1~i按字典序排列的最小代价,dp[i][1]dp[i][1]

2016-11-06 22:36:16 449

原创 CodeFoces #377(732A|732B|732C|732D|732E)|贪心

这是贪心大赛的节奏。。。732A Buy a Shovel题目大意一件商品k元,你身上有无数多个10元硬币和r(1≤r≤91\leq r\leq 9)元硬币,问买多少件商品你才可以刚好使用你身上的硬币购买而不需要找零。题解显然商品件数不会超过10件(10件时可以只使用10元硬币),且只k的个位数有关。#include <cstdio>int main() { int k, r, i;

2016-10-23 11:55:03 1181

原创 CodeForces 731

731A题目大意:类似电话表盘,不过表盘上有26个字母,问一开始表盘指向a,如何转动表盘使得依次指向字符串中的各个字符且转动表盘次数最小(转一格为一次) 题解:每次都拿最近的那个#include <cstdio>#include <algorithm>using namespace std;char s[128];int main() { int i, now, ans = 0,

2016-10-17 22:17:48 1240

原创 CodeForces #?(727A|727B|727D|727F)|贪心|动态规划

727A题目大意:给出s和t,对s有2个操作:一个×2,一个*10+1,问怎么操作能使s变成t。 题解:暴力。。#include <cstdio>typedef long long ll;bool isPower2(ll x) { return x - (x & -x) == 0;}ll s, t, p[64];void output(int d, ll r) { puts

2016-10-16 12:02:29 1119

原创 CodeForces 724|模拟|贪心|扩展欧几里得|

724A Checking the Calendar题目大意:题目感觉有点晦涩。。就是说给定不是闰年的某个月(1~11月)第一天是星期几,下个月的第一天是星期几,问你是否合法。#include int parseDay(char *ch) { if (ch[0] == 'm' ) return 0; if (ch[0] == 't' && c

2016-10-12 22:23:54 532

原创 CodeForces 723

723A数轴上有3个点x1<x2<x3x_1<x_2<x_3,求一个点x0x_0,最小化|x1−x0|+|x2−x0|+|x3−x0||x_1-x_0|+|x_2-x_0|+|x_3-x_0|。 显然,x0x_0肯定在[x1,x3][x_1,x_3],否则不是最优解,故化简得:x3−x1+|x2−x0|x_3-x_1+|x_2-x_0|,故x0=x2x_0=x_2时解最小为x3−x1x_3-x_1

2016-10-04 22:24:43 1903

原创 CodeForces 713A|Sonya and Queries|字典树|没方法

给出一些数字,询问一些满足对应位为偶数(0表示)或奇数(1表示)的数字的个数。 比如010格式的数字可以有818,52,98,2212等。首先各位数具体为多少并没有什么关系,所以全都模2,将长度扩展到18方便位数不相等的查询。 然后扔到字典树里查询就好啦。#include <cstdio>#include <cstring>#include <algorithm>using namespa

2016-09-22 22:23:07 676

原创 UOJ 13|【UER #1】跳蚤OS|字典树

http://uoj.ac/problem/13 Linux文件系统下,建立一些文件夹链接,并询问某个路径指向的实际路径。其实如果对路径按/划分,每层文件夹名hash一下,然后/a/b/c就可以表示成0/1/2/3,那么建立一棵树走一遍就好啦,链接就是树上节点加虚边咯。不想写hash呢,对于每层文件夹的信息划到紧跟文件夹名的”/”上,那么剩下的也一样啦。#include <cstdio>#inc

2016-09-20 22:00:42 345

原创 UOJ 12|【UER #1】猜数|数学

http://uoj.ac/problem/12给定完全平方数nn,并已知gl=n(g,l∈N)gl=n(g,l\in \mathbb{N}),对于a,b(g|gcd(a,b))a,b(g|\gcd(a,b)),求min(a+b),max(a+b)\min(a+b),\max(a+b)首先很容易想到均值不等式:a+b≥2ab−−√=2n−√a+b\geq 2\sqrt{ab}=2\sqrt{n},又

2016-09-19 22:14:35 421

原创 UOJ 150|NOIP 2015 Day 2|运输计划|LCA

给出N点树和M条树上简单路径,求将一条边的边权改为0后使M条路径中最长的最短,求修改后最长路径的长度。题目描述来看容易想到二分答案,当我们二分长度时,显然不需要考虑比二分的答案要短的路径,对于长的路径,我们只能修改一条边的长度,因此这条边必须在较长路径中都出现,即这些路径的路径交上的边。 考虑序列上的区间交的求法,即在两端点打标记,那么将某个区间归属于其左端点,求前缀和后若某端点的前缀和=区间数量

2016-07-21 12:05:03 1452

原创 UOJ 147|NOIP 2015|斗地主|搜索|贪心

你有一些扑克牌,有一些出牌方式,问最少出多少张牌才能全部打光。 分别有:王炸、炸弹、单张、对子、三张、三带一、三带二、四带两张、四带两对、单顺子、双顺子、三顺子。 顺子不包含大小王和2。题目:http://uoj.ac/problem/147没有飞机真是可惜 UOJ中途加强数据QwQ。嘛,考虑搜索。 (还记得考场上的程序写的很丑)显然对于一个出牌的方案,顺序是无关的,因此考虑优先出顺子,顺子

2016-05-22 13:22:01 1944

原创 BZOJ 3784|树上的路径|点分治|堆|RMQ

求前M个路径,使路径权最小。和NOI 2010 超级钢琴类似。。。#include <queue>#include <cstdio>#include <cstring>#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 50005, M = N * 2, S = 2000005;using namespace std;int bin[20]

2016-04-29 12:25:46 710

原创 BZOJ 2535|BZOJ 2109|BZOJ 2008|NOI 2010|航空管制|拓扑排序

求图的拓扑序,使各点v在序列中位置编号不大于给定的k[v]。 并求在拓扑序的最早出现的位置。最早出现和最晚出现相反,如果反序拓扑图,那么就变成最晚出现的位置,然后问题就简单了。。只要拓扑排序时不断地推迟对应节点的出现时间直到不能再推迟就可以了。至于不大于,由于至少出现的位置,因此只要是后面的就可以了,只要能放就放。BZOJ 2535和2109都卡\n和空格啊。。 BZOJ 2008好像不可做的样

2016-04-29 12:18:45 1056

原创 BZOJ 2006|NOI 2010|超级钢琴|堆|RMQ

对于所有的子序列,如果我们固定右端点,那么左端点就有一个区间了(这种想法和4268有点像?),那么如果我们取了一个左端点j能让区间值最大,那么就取了,左区间从[l,r][l,r]分裂为[l,j−1][l,j-1]和[j+1,r][j+1,r]。 那么取最大的k个就是答案了。至于怎么确定最大的左端点,显然通过后缀和+RMQ就可以实现了。 [r+1,n]对于所有的左端点都是一样的,所以有没有对于我们

2016-04-29 11:49:43 766 1

原创 BZOJ 3648|寝室管理|点分治|树状数组|平衡树

给出一个至多有1个环的图,求长度不超过K的路径数。考虑树的情况,显然用点分治就可以搞出来了。 对于过根的路径,先处理出各深度有多少的点,再依次枚举各子树,对于各点,有其深度,问题变成了在其他子树中,与现有深度之和不超过K的有多少个,而枚举的点到根的距离是已知的t,那么就变成在之前的子树中,深度不超过K-t的点有多少个,平衡树、树状数组都可以轻易地维护。O(nlog2n)O(n\log^2 n)环呢

2016-04-29 09:53:59 1021

原创 BZOJ 3522|POI 2014|Hotel|树形DP

给出树上三点对的个数,满足两两距离相等。显然,符合题意的情况只有3个点在某个点的不同子树中的情况,因此枚举根跑一次树形DP处理出不同深度的点的个数搞一下就可以了。2016年1月A的题为什么没有写题解呢。。 为Claris的加强版做准备#include <cstdio>#include <cstring>const int N = 5001, M = 10000;int h[N], v[M],

2016-04-28 22:36:36 892

原创 POJ 3744|Scout YYF I|概率DP

令dp[i]dp[i]表示到i的概率 显然有dp[i]=p×dp[i−1]+(1−p)×dp[i−1] dp[i]=p\times dp[i-1]+(1-p)\times dp[i-1] 然后状态转移很大,考虑矩阵优化。 显然有 [dp[i−1]dp[i−2]][p1−p10]=[dp[i]dp[i−1]] \begin{bmatrix} dp[i-1]&dp[i-2] \end{bma

2016-04-28 18:14:22 524

原创 BZOJ 4515|SDOI 2016|游戏|树链剖分

未完待续#include <cstdio>#include <algorithm>#include <cstring>typedef long long ll;using namespace std;const int N = 100005, M = N * 2, S = M * 2;int h[N], p[M], v[M], sz[N], fa[N], cnt, ts;int dep

2016-04-28 17:20:11 573

原创 BZOJ 4514|SDOI 2016|数字配对|筛法|费用流

任意两个符合条件的数字,指数之和只差1,因此形成了二分图,每个点的可选择次数为bib_i,因此考虑费用流, <s→i,cap:bi,cost:0>(ai的指数之和为奇数<s\rightarrow i, cap: b_i,cost:0>(a_i的指数之和为奇数 <i→t,cap:bi,cost:0>(ai的指数之和为偶数)<i\rightarrow t,cap:b_i,cost:0>(a_i的指数

2016-04-28 15:43:46 752

原创 BZOJ 4517|SDOI 2016|排列计数|错排公式|组合数学

求满足恰好m个数字使其元素和位置序号不同的全排列的个数。对于简单的错排问题,全部数字序号不同的排列数字个数定为D(n)D(n)。 长度为N的数列,元素1有n-1种放法,对于剩下的n-1个元素,如果元素1放到了位置k,那么元素k放在1,那么剩下的即为D(n−2)D(n-2),否则D(n−1)D(n-1)。 求得D(n)=(n−1)[D(n−2)+D(n−1)]D(n)=(n-1)[D(n-2)+D

2016-04-28 10:23:51 858

原创 BZOJ 4558|JLOI 2016|SHOI 2016|方|容斥原理

题面有毒。。poisonous poi!poi!poi! 注意斜着的正方形也是要算的。如果没有删除点,总的方案数显然是∑i=1min{n,m}i(n−i+1)(m−i+1)modp \sum_{i=1}^{\min\{n,m\}} i(n-i+1)(m-i+1) \mod p i表示有i种斜着的正方形,(n-i+1)表示以(i,k)为左上角的正方形数目,(m-i+1)表示k的数目。接下来考虑每

2016-04-28 00:30:38 3904

原创 BZOJ 4562|HAOI 2016|食物链|动态规划

写水题掉RP啦 我记得这个还是去年学长研究性学习的内容之一。。不过很水就是了。。 DAG DP。。懒得写拓扑排序了(和DP融为一体)#include <stdio.h>const int N = 100005, M = N * 2;int dp[N], h[N], p[M], v[M], in[N], entry[N], cnt = 0;void add(int a, int b) {

2016-04-27 21:42:35 1253

原创 BZOJ 4025|二分图|CDQ分治|并查集|LCT

一条边有存在的时间[start,end][start,end],问每个时刻该时图是不是二分图。是二分图就不存在奇环,考虑并查集维护最大生成树,是否是奇环也很好判断了,两点间距离就是dis[a]+dis[b]-2*dis[LCA],由于我们只关心奇偶性,因此把加减法换成xor也是可以的,然后就变成了dis[a]^dis[b]了,加上非树边就是环了。那么我们就考虑扫一遍时间,然后到了对应时间就加入边、删

2016-04-27 17:51:22 1133

原创 BZOJ 1854|SCOI 2010|游戏|并查集

如果把不同武器之间的边连起来跑一边DFS是30%的数据。 但是一定要是不同武器之间连边么?武器内的两个值?连边后发现了性质:如果连通块形成了环,那么全部点都可以满足,否则满足n-1个,肯定是最大的那个不能满足。 因此考虑并查集维护连通块,合并的时候给小的打标记,形成环时,给最大的打标记。 那么从1开始一直往后直到没有标记这段点就是答案。#include <stdio.h>#define FO

2016-04-27 16:08:08 518

原创 BZOJ 4546|CodeChef XRQRS|Xor Queries|可持久化Trie

#include const int N = 500005;struct Trie { Trie* c[2]; int size; Trie() { c[0] = c[1] = this; size = 0; } Trie(Trie *l, Trie *r, int sz) { c[0] = l, c[1] = r, size = sz; } void* ope

2016-04-27 15:02:32 702

原创 CodeForces 274C|275E|The Last Hole!|计算几何

给出N个点,从零时刻起,分别以这N个点为圆心的N个圆逐渐变大,有半径r=时刻t;随着时间推移,图形当中可能出现一些”洞”,而且出现的洞一定会在某时刻消失。严格地,一个洞被定义为封闭的、连通的未被圆覆盖的区域,可以理解为被圆所围起来的区域。对于给出的n个点,求出最后一个洞消失的时间;如果没有出现过洞,输出-1。最后一个洞♂考虑3个圆的情况,发现洞消失的位置即三个圆心围成的三角形的外心,而且当且仅当三角

2016-04-27 12:18:29 894 2

原创 what the hell it is?!

博客暂停更新

2016-04-27 10:35:50 778

原创 POJ 3470|Walls|线段树

网格上有N(<=5e4)堵墙,有M(<=5e4)只鸟,其会选择最近的那堵墙撞晕,求鸟撞到各堵墙的次数。考试时给的中文翻译不忍直视。。貌似还是从某题解直接抄过来的。。直接看英文了。。 然后就在POJ上排#13了。。首先离散化一下。。 然后因为只能上下左右4个方向飞情况类似,这里我们只需要讨论一个方向。考虑向上飞的情况,我们人为添加一条下边界扫描,同时维护横着的墙,显然,如果遇到了新的墙,肯定目前其

2016-04-27 10:32:30 1396

原创 BZOJ 3571|HNOI 2014|画框|最优匹配|计算几何

求最大匹配,使得选中匹配边的权值a的和与权值b的和的积最小。考虑方案(∑ai,∑bi)(\sum a_i,\sum b_i) ,其在反比例函数ans=xyans=xy上,显然在这个函数的右上方的点都比当前方案更优,因此所有可能的答案都在这个下凸壳上,考虑枚举下凸壳上的点,发现如果我们连接下凸壳两端点,那么离连线最远且最靠近原点的点肯定在下凸壳上,因此考虑分治。 (摘自:http://blog.cs

2016-04-26 22:46:10 568

原创 POJ 3017|Cut the Sequence|动态规划|单调队列

给定一个数列{an}\{a_n\},任意将连续的aia_i分块,使所有块的和都不超过MM,最小化各块的最大值的和。dp[i]=min{dp[j]+max{a[j..i−1]}} dp[i]=\min\{dp[j]+\max\{a[j..i-1]\}\} 其中∑i−1k=jak≤M\sum_{k=j}^{i-1} a_k\leq M 时间复杂度是O(n2)O(n^2),通过打表我们可以发现决策单

2016-04-26 18:21:48 1074

原创 POJ 3245|Sequence Partitioning|动态规划|单调队列

题意真是难懂。。一个长度为NN的序列(每个元素是(ai,bi)(a_i,b_i)这样的数对),连续地分成若干组。每组左右边界是(l1,r1),(l2,r2),⋯,(lp,rp)(l_1,r_1),(l_2,r_2),\cdots,(l_p,r_p),满足li=ri−1+1,li≤ri,l1=1,rp=nl_i = r_{i − 1} + 1, l_i ≤ r_i, l_1 = 1, r_p = n。

2016-04-26 17:56:50 984 1

原创 SGU 278|Fuel|凸包

有N种汽油每种有三个属性:密度aia_i,强度cic_i,价格bib_i。用第i种汽油mmkg拥有m∗aim*a_i的体积,m*ci_m*ci_的强度,花费m∗bim*b_i。汽车能装任意比例混合的多种汽油。总体积不能超过AA,总花费不能超过BB,最大化总强度,保留至少6位小数。∑miai≤A∑mibi≤Bmax∑mici\begin{aligned} \sum m_ia_i\leq A \\\s

2016-04-26 16:57:02 723

信息学竞赛离线评测软件

最受欢迎的信息学竞赛离线评测软件,需要提供输入输出文件,该软件将可以自动帮您运行程序(需要源代码),并输出得分。

2011-07-29

空空如也

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

TA关注的人

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