自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2017ACM/ICPC沈阳站总结

比完赛,写一个总结: 因为一个队友是本地人的缘故,我们两个人住就能够花钱花得大方点了,没有住汉庭(汉庭的隔音真的差),我个人对房间还是非常满意的。第一天热身赛,我们10分钟切掉了AD两题,然后B死活过不去。。。上机的我怀疑人生了,四联通八联通都不会写了嘛orz。。后来把空行去掉了就过了orz。。果然电竞选手都不需要视力。没有看清题反而过了B。我们后来看到C题关于空行的提问,judge说不需要空行,

2017-10-23 11:02:04 2638 1

原创 hdu 6202 cube cube cube

题目链接PS:求你们放过测评姬吧orz一个八面四轴的奇特模仿,问给定的一个状态能否在三步及三步以内复原大暴力,写得累死了orz 虽然代码写得丑,但是能过呀orz#include <bits/stdc++.h>using namespace std;int a[100];void change(int *t1, int *t2, int *tmpx, int len) { for (int

2017-09-11 20:37:35 389

原创 2017CCPC女生赛 hdu 6031 Innumerable Ancestors

题目链接分析: 二分答案,然后枚举A集合的元素,把那个深度的节点放到集合里,再枚举B集合的点看能否有集合里的节点是B的祖先。自己真是好菜= =不光这个倍增,还有ST,我一直把for (int k = 1; (1 << k) <= n; k ++) 写成 for (int k = 1; k <= n; k <<= 1) = =而且总检查不出这个错- -写个博客提醒一下。代码:#include <io

2017-05-18 16:44:22 516

原创 2017CCPC女生赛 hdu 6026 Deleting Edges

题目链接分析: 自己做的时候看错题了,以为是所有的点对最短路都要和原图一样,然后GG。经队友提醒,我补完了这题= = 思路大致是先跑一个最短路。如果对于一条边(i,j)(i, j), 如果d[i]+c[i][j]=d[j]d[i] + c[i][j] = d[j],那么这条边就合法。记录一下所有边的合法入度。因为一棵树中,每个点的入度只有一,所以所有的入度乘一下就好了。代码:#include <

2017-05-17 16:23:12 577

原创 2017CCPC女生赛 hdu 6024 Building Shops

题目链接分析: 想了个dp。令dp[i]dp[i]是最后一个冰淇淋站建在i的花费,那么有转移方程dp[i]=min(dp[j]+val[i]−∑dis[i]−dis[j])dp[i] = min(dp[j] + val[i] - \sum{dis[i] - dis[j]})看了一下,好像还有O(n)O(n)的dp方法,我要再学习一下。PS:感觉这一场可以和队友一起训练一下的,结果我自己智障,一个人

2017-05-17 15:56:38 721 1

原创 2017CCPC女生赛 hdu 6029 Graph Theory

题目链接分析: 只是瞎构造了一下,从后面往前扫,如果遇到2,那么需要找后面的cnt里找一个配对,cnt–,如果遇到一个1,那么计入cnt。 如果n是奇数就不可行。代码:#include <iostream>#include <cstdio>#include <vector>#include <cstring>#include <stack>#include <queue>using n

2017-05-17 15:49:53 571

原创 2017CCPC女生赛 hdu 6030 Happy Necklace

题目链接分析: 一道推公式的题目。看着这个范围就感觉是矩阵快速幂。 首先,可以把连续的素数中这个要求简化成连续两个和三个中的要求,很容易想。 定义:a[i],b[i]a[i],b[i]分别表示长度为i,以red和blue结尾的串的个数。 然后,探索一下,发现a[i]=a[i−1]+b[i−1],b[i]=a[i−2]a[i] = a[i-1] + b[i-1], b[i] = a[i - 2

2017-05-17 15:45:16 450

原创 CodeForces - 497D Gears

题目链接分析: 如果固定了A不动,那么Q点则以P为圆心,PQ为半径做圆周运动。然后B与Q的相对位置保持不变。那么B上的任意一个点D,则绕着点P+QB,以PQ为半径做圆周运动。题目变成了A是否和B上任意一个顶点画的圆相交的问题了。判断A与圆相交是板子了。同理也固定B不动,A做圆周运动判一下。代码:#include <iostream>#include <cstring>#include <cst

2017-05-06 14:41:14 1169

原创 hdu 5098 smart software installer

题目链接分析: 这道题很好理解,如果B要求A实现,那么就从A连一条有向边到B,然后在DAG上跑一个带星的最长路。 只是这个输入非常反人类啊,难点在输入上= =代码:#include <iostream>#include <map>#include <vector>#include <queue>#include <cstring>using namespace std;const int

2017-05-06 14:32:01 371

原创 hdu 5094 Maze

题目链接分析: 把十把钥匙的状态进行二进制压缩,然后就是bfs了。 坑点就是两个点之间可能有很多门,一个地方可能有多把钥匙。之前一直WA,我看了题解才做对= =代码:#include <iostream>#include <cstdio>#include <vector>#include <cstring>#include <stack>#include <queue>using na

2017-05-06 14:28:15 296

原创 hdu 5091 beam cannon

题目链接题目大意: 在平面内有一些点,现在给定一个矩形框,求矩形框能包含最多点的个数。分析: 可以转化成一维的线段树。先确定横坐标的范围,这样只需要找满足纵坐标最大的差小于等于矩形框的高的最多的点就行了。把纵坐标做成线段树,以每个点的纵坐标为起点,长度为矩形框的高在线段树上覆盖。如果有两个线段覆盖了同一段区域,那么说明可以找到一个矩形同时覆盖这两个点。所以题目转化成了找线段树中最大的线段覆盖数。

2017-05-06 14:24:39 281

原创 UVALive - 7531 Fence

题目链接分析: 题目要求通过1和2√\sqrt{2}长度的边把给定的点全部围起来,于是很容易想到求一个凸包,然后长度1个数为max(abs(x1−x2),abs(y1−y2))−min(abs(x1−x2),abs(y1−y2))max(abs(x1-x2), abs(y1 - y2)) - min(abs(x1-x2), abs(y1 - y2)), 长度为2√\sqrt{2}的为min(abs

2017-05-06 10:46:39 257

原创 UVALive - 7528 Beehive

题目链接分析: 我们可以建一个坐标系 竖线右边+X,左边-X,一列为一;纵方向半个六边形高度为一; 假设坐标(-2, 2)到(3,4),那么让(-2, 2)的横坐标先变成3这样至少三步;如果纵坐标的高度差小于等于横坐标高度差,那么高度差可以在横坐标平移的的过程中弥补,否则还需要纵坐标平移。代码:#include <iostream>#include <cstring>#include

2017-05-05 21:23:33 294

原创 hdu 2476 String painter

题目链接分析: 区间dp。开状态dp[l][r][c],表示[l, r]这个区间里染成c颜色的最少操作数。 考虑一段区间,我们从l开始染。枚举子区间[l, k],这段贪心地想,一定是染成和l的目标颜色一样才最优。然后把问题分解成两个子区间的问题就能解决了。如果区间中存在一段和目标一样的序列,那么这一段不需要染色,直接逃过。 dp[l][r][c]=min(dp[l+1][k][c[l]]+dp

2017-04-15 16:28:01 297

原创 hdu 4283 You Are the One

题目链接分析: 一道区间dp。因为有栈的约束,这道题用贪心是不可行的。 令dp[l][r]表示原区间[l, r]的人最小的花费。这里的最小花费是去除了前l - 1个以及后N - r个的。 考虑[l, r]中,第一个人在区间中的排序。因为是第一个人,他的位置会把整个序列切成两块。于是把整个问题分成了两个子问题。 dp[l][r]=dp[l+1][k]+dp[k+1][r]+(k−l)∗v[l]

2017-04-14 21:36:33 306

原创 codeforces 149D Coloring Brackets

题目链接分析: 区间dp。 开四维dp[l][r][x][y],表示在区间[l, r]中,最左边涂x,最右边涂y,的可行状态数。 当l和r的括号配对的时候,可以从[l + 1, r - 1]推导出来。配对的括号要满足给定的要求。 当l和r的括号不配对的时候,那一定能把这个区间划分成两个配对的小区间,搜索配对的两个小区间。递归搜索两个子区间。这时候l和r的两个括号没必要满足颜色不同的要求。代码

2017-04-14 11:21:26 251

原创 atcoder square869120Contest #4 D - Driving on a Tree

题目链接自己好菜啊,这道题A得好辛苦分析: 树形dp。第一次dp是从上到下的dp,统计以1为根的期望。然后第二遍dp分析一个节点的父亲对子节点的影响。具体的操作有官方题解。我也不赘述了。 这道题坑点在第二遍dp一开始对树根的处理吧,wa得死去活来。仔细想清楚了也就能过了。这种题我以前从来没有接触过,算盲区吧。。哎,我好菜啊代码:#include <iostream>#include <cstr

2017-04-12 20:02:57 404

原创 51nod 1490 多重游戏

题目链接分析: 这道题很有意思啊。一开始我一直想找规律什么的,但并找不到。 后来发现自己naive了,不光一局之中不能找到规律,K局也会影响到最后的结果。如果先手拥有主动权,可以控制自己的输赢,让自己一直输,最后一局再赢。 于是题目变成了建一颗字典树,然后遍历一遍,找找是否有先手必胜或必败态。再考虑。代码:#include <iostream>#include <algorithm>#in

2017-04-05 20:08:02 260

原创 51nod 1672 区间交

题目链接分析: 从左往右扫,如果进入一个区间的左端点,计数器加一,出去一个区间的又端点,计数器减一。这样就能在O(N)O(N)的时间内判断出可行的区间。 因为a[i]>=0,所以需要让区间的交集的长度尽可能大。 考虑每次从一个区间的右端点出来的情况。假设当前区间被使用到。现在确定了右端点,只需要找左端点在哪里就行了。因为左端点要尽可能远离右端点,所以在所有覆盖当前右端点的区间中找一个第K小的左

2017-04-05 15:46:24 425

原创 hihocoder 1483 区间价值

题目链接分析: 肯定不能暴力找。(这不是废话嘛。。) 稍微思考一下,我们可以发现区间的单调性。当区间宽度变长时,所谓的区间的价值一定会增大。 于是我们先二分答案,然后可以利用区间的单调性判断答案是否可行。 用Two pointers固定左端点,检查一段区间的价值是否大于二分值。假设[L, R]这个区间的价值大于了二分的答案,那么[L, R + 1]……以后的区间都能够满足要求。这样能够在线性

2017-04-03 20:14:50 501

原创 hihocoder 1488 排队接水

题目链接分析: 首先,很好思考,只要将区间内最短优先排列就能得到答案。 但是直接暴力肯定会TLE,我们换一个思考方式。 假设我们已经得出了[L, R]区间的答案,那么[L + 1, R], [L - 1, R], [L, R + 1], [L, R - 1]都很容易计算得出。考虑新加入的数K应该在新的序列中排第几个,那么对原序列∀x>K\forall x > K,所有的数都会往后移动一个单位,

2017-04-03 15:00:56 625

原创 codeforces D. Bear and Tree Jumps

题目链接自己好弱啊, 比赛的时候感觉有点想法,但是思维一直非常混乱,没有找对正确的节点合并的方法- -学习了一下题解,感觉通过层次将节点分类的做法非常巧妙,自己没有想到= =在此mark一下。分析: 求总的路径长度是非常简单的,考虑每条边存在于几个点对路径中就可以了。这道题求的是每条路径⌈LK⌉\left \lceil\frac{L}{K} \right \rceil,当然,简单的求总路径就不可行

2017-03-20 17:24:07 283

原创 hdu 1069 Monkey and Banana

题目链接其实,dp我一直是拒绝的。这方面我一直十分薄弱。但是难关还是一定要攻克的= =如是我终于开始磕dp专题了。那就先从比较简单的问题开始吧。题目大意是有一些不同规格立方块无限个,把它们叠起来。要求下方的在横截面上长宽严格大于上面的,问叠起来最高的高度。分析:考虑到立方块可以交换长宽高,所以我把一个立方块变成六个不同的立方块来思考。将变换长宽高后的立方块按照关键词先后先a从小到大,再b从大到小,最

2017-03-11 18:30:09 155

原创 dlutoj 1081 Prufer 序列

题目链接分析:这道题并不难。看懂了prufer序列就能明白,序列中出现的节点应该是一颗生成树的非叶子节点,而且题目已经降低了难度,序列中的相同节点只计算一次。所以,题目转变成了统计每个节点作为非叶子节点的生成树的个数。对一张图,统计生成树的个数要用到基尔霍夫矩阵(矩阵树定理),这个不明白的话先要学习一个。统计非叶子节点的想法很简单,把这个点先移除,剩余的点统计生成树的个数,那么该节点作为叶子节点的生

2017-03-07 20:43:20 298

原创 bzoj 2038 小Z的袜子

题目链接分析:这道题就是暴力找,但是有一种方法,通过巧妙地重新整理查询的次序,来降低复杂度。这种算法叫莫队算法,适用于离线的区间查询问题。如果我们已经知道了对于查询[L, R]的答案,那么对于这道题,[L-1,R],[L+1,R]等等的问题查询其实只需要O(1)O(1)的转移,这种情况的计算就可以用莫队算法巧妙地解决。方法是这样的,对所有查询离线,然后重新分块排序。对于NN个查询,我们分出N‾‾√\

2017-02-27 21:10:53 216

原创 主席树学习笔记

今天学习了一个特殊的线段树结构,主席树。概念:主席树是一种可持久化的线段树结构,然后没了= =用途:主席树的最基本用途是查询a[l]a[l]……a[r]a[r]的x∈[L,R]x\in \left [ L, R \right ]的xx的个数。 引申还可以查询区间中第K小的数是什么。等等……结构:对于主席树的结构理解,我自己阅读多篇他人的博客,才终于明白了是怎么一回事。不知是博客写的不好还是我的理解

2017-02-21 18:27:17 280

原创 codeforces 570D Tree Requests

题目链接分析:之前学习到了一种做法,将树上的dfs序和bfs序都计算出来,主要用到bfs序。通过bfs序可以找到对应层数的所有节点,然后通过dfs序范围确定符合要求节点的范围长度,这一点可以用二分来确定左右区间范围。然后就是判断区间里的字母个数为奇的是否小于等于1。我用了数组预处理了每个字母的前缀和,在写题解的时候想到可以用int二进制表示。代码:/*************************

2017-02-16 22:26:56 257

原创 codeforces 660E Lomsat gelral

题目链接分析:这是一道启发式合并的题目,大致思路非常简单,就是从根节点dfs,对于每棵子树,将它子节点的信息合并到子树根节点。合并的过程中,把小树合并到大树中降低复杂度。可以利用map, s[i][j][k]s[i][j][k]指以ii为根节点的子树中,颜色jj的节点数量。cnt[i]cnt[i]记录节点ii的答案。存疑:我自己只是大致明白ff数组的作用,但是具体究竟是怎么实现的,现在还需要留一个疑

2017-02-16 18:31:50 280

原创 hdu 5212 Code

题目链接分析:这道题可以尝试容斥原理或者莫比乌斯反演,其实本质上是一样的。处理一下每个素数在给定的条件中有多少个倍数,然后容斥原理或者莫比乌斯反演统计一下gcd(x,y)=tgcd(x, y) = t的(x,y)(x, y)的对数,最后统计一下答案,取模。代码:/*****************************************************///#pragma comm

2016-12-07 21:31:44 295

原创 dlutoj 1008 欧拉函数求和

链接(不知何时失效) 1008: 欧拉函数求和 Description 前不久,小D刚刚学习了欧拉函数. [1,n] 中和n 互素的个数称为nn的欧拉函数,记作ϕ(n)。其中,有一个性让它记忆深刻:n的所有因子的欧拉函数之和等于n,即 ∑d∣n ϕ(d)=n但是, 他并没有停下探索的脚步,经过一番脑洞后,他构造出了个更一般的函数: f(n,k)=∑ik∣ik−1∣⋯∣i1∣n ϕ(ik),

2016-11-23 19:51:26 562

原创 spoj Repeats

题目链接分析:这是一道sa的经典题目,求一个长串中连续重复出现的的串的最大次数。 首先将sa和height数组求出来。 这样思考:如果一个串连续出现了k次,设这个串长度为len,如果在第i位出现了串中的某个字符,那么i + len, i + 2*len……都会出现这个字符。 那么先枚举串的长度len,对于每个i + k * len位,应该都能够有最长公共子串lcp>=len,串重复的次数为

2016-11-18 20:42:41 253

原创 spoj Distinct Substrings

题目链接分析: sa后缀数组题。正着不好做可以反着想。我们可以思考重复的串有多少个,这就对应着后缀数组求完后求的height数组。每个height[i]height[i]长度的串可以构成height[i]height[i]个重复的串,通过总的减去就行了。刘汝佳的大白sa模板有一些小问题,在此进行了修正。代码:/********************************************

2016-11-17 21:47:03 175

原创 poj 2406 Power Strings

题目链接分析: 这道题正解是KMP计算失配指针。 http://www.cnblogs.com/zhanzhao/p/4761477.html推荐一个解释比较清晰的网址 巧妙运用了next数组的意义及计算next的方法,能够证明最小的周期是len/(len−f[len])len / (len - f[len])如果整除,否则就是1。/******************************

2016-11-17 21:37:59 170

原创 Codeforces Round #379 (Div. 2) F. Anton and School

题目链接分析:这道题的关键点是要知道一个关于位运算的式子 a+b=(a|b)−(aa + b = (a | b) - (a &b) b) 这样的话,可以有以下的推导:∑ni=1a[i]=sum\sum_{i=1}^{n}a[i] = sum,那么c[i]=∑Nj=1(a[i]+a[j])−b[i]c[i] = \sum_{j = 1}^{N}(a[i] + a[j]) - b[i],然后推出b[

2016-11-17 18:35:15 340

原创 poj 3261 Milk Patterns

链接分析:sa的板子题之一,比男人八题的musical theme还要稍微简单一点。 先做好sa和height的板子,然后二分长度找答案。 关于如何确定同一个串是否出现k次,我是这么想的: height[i]数组是中的字符串是以字典序排列的,所以说如果height[k]和height[k + 1]都是大于二分值mid的,而这三个串又是相连的,说明他们的前mid长度的子串是相同的。所以对heig

2016-11-14 20:57:43 230

原创 后缀数组学习小结(已经死了)

一直想学习后缀数组,但是lrj的算法经典上只给出了原理和代码,代码上面没有注释,让人很难读懂。所以我对后缀数组的了解一直停留在知道这个东西和倍增法的原理,至于板子和套路完全不知。 最近还是死啃了板子,把我现在掌握的东西记成博文,也方便自己和大家。 本人也不是很会这个,如果dalao们发现了问题,请指正!首先,倍增法在算法竞赛上已经讲得非常详细了,在此我也不再赘述,大家自己阅读书吧。我在这就...

2016-11-12 17:52:47 441

原创 poj 2774 Long Long Message

链接分析:sa的板子题,mark一下。 附带自己的sa学习小结。代码:/*****************************************************///#pragma comment(linker, "/STACK:1024000000,1024000000")#include <map>#include <set>#include <ctime>#inc

2016-11-12 17:10:51 209

原创 hdu 5961 传递 ccpc 2016 合肥站

传送门分析: 这道题非常有趣。。 可以这样想: 对于一个传递的图,那么对于∀a,b,c∈V\forall a,b,c \in V,如果a−>b,b−>ca -> b, b -> c,那么a−>ca -> c。画一个图可以看出来,这个的话从一个点出发一定只有两层的深度。这很好理解。那么就bfs一下,如果搜索的深度大于2就返回falsefalse就行了。这道题要mark一下。代码:/*******

2016-11-06 21:20:38 348

原创 hdu 5965 扫雷 ccpc 2016 合肥站

传送门分析: dp题目计dp[i][j][k]dp[i][j][k]为到第ii个位置,上下一共放jj个雷,前面一格放kk个雷个方案数。 枚举一下第i−2i-2位的雷数与第i−1i-1位的雷数,那么第ii位的雷数可以算出来。 如果放两个或不放,数目保持不变;放一个的话前一个状态乘2。 坑爹的是这道题模的是1e8+71e8+7,WA了一下午,真是坑死了。代码:/*****************

2016-11-06 21:06:25 863

原创 hdu 5963 朋友 ccpc 2016 合肥站

传送门分析: 我一开始yy了一个做法,随便定一个根节点,每个节点给一个权值(0/1)代表以这个节点为根的子树玩这个游戏先手输/赢。 对于叶子节点,权值给0。 对于非叶子结点,考察每个儿子: 1,如果与儿子连接的边权和儿子节点的权值一样,就把这个权值提出来 2,如果与儿子连接的边权和儿子节点不一样,儿子节点权值先取反,再提出来 把所有从儿子节点提出来的权值异或起来,变成这个节点的权值。

2016-11-06 21:03:59 256

线性分类器结果矩阵

我个人的线性分类器(linear classifier)的结果,欢迎大家取用。博客地址http://blog.csdn.net/hahatianx/article/details/79325155 如有错误,请指正,谢谢!

2018-02-14

空空如也

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

TA关注的人

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