
Acm
文章平均质量分 77
摇着酒壶敲代码
独孤求败、戛然而止。你的时间有限,所以不要为别人而活、不要被教条所限、不要活在别人的观念里、不要让别人的意见左右自己内心的声音。最重要的是:勇敢地去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。“最迷人的剧情不是后来居上,而是王者归来。”
展开
-
动态规划(DP)中LCS问题合集(有待更新中~
现在遇到的LCS问题,大概分为下列:一、求朴素最长公共子序列问题(推荐题目:hdu 1159 Common Subsequence:http://acm.hdu.edu.cn/showproblem.php?pid=1159 )参考代码://hdu 1159#include #include #include #include #include #define MAXN原创 2015-08-13 19:51:26 · 754 阅读 · 0 评论 -
hdu 5763 Another Meaning (KMP + 递推(dp))
不用kmp其实也可以过,std::string中有个strsub截取字符串函数,可以直接拿来使用,时间复杂度在O((n-m)*m),不知为啥能过。#include #include #include #include #include #include #include #include #include #include #include #include #原创 2016-07-29 22:33:17 · 458 阅读 · 0 评论 -
二分元素第一次出现的位置和最后一次出现的位置
stl里面封装了挺不错的lower_bound()和upper_bound()。但是有时候条件的判断又得自己写,所以摸索着写了两个函数,还是比较习惯 (low上界:int binsearch_min(int lef, int rig,int key,int a[]){ int ans = -1; int low = lef,high = rig; while(low原创 2016-07-31 14:28:41 · 1934 阅读 · 0 评论 -
hdu 5802 windows 10
题意:把音量从p调到q,若 q >= p,一直按着每次音量上升1若 q 求 p -> q的最小时间。思路:枚举 2^tx-1 > q - p,选择降到q的下方或上方,然后逼近。做多校时由于一直想着按up要加+1所以做了两边dfs,一直tle,看了题解才恍然大悟:以下是看过标程写的代码:记录stop,停下多少次,不管有没有up,如果最终跳到q的下方,所有向上原创 2016-08-05 12:54:17 · 816 阅读 · 0 评论 -
线段树模板
首先感谢以下两篇博客:http://blog.youkuaiyun.com/metalseed/article/details/8039326http://blog.youkuaiyun.com/acmer_ak/article/details/52002537第一篇博客讲述了很多线段树的题目以及解答(很不错的模板),第二篇博客讲述了一个很好的思路。一、以poj 3468 为原型的一份模板原创 2016-08-01 22:05:17 · 451 阅读 · 0 评论 -
uva 1395 苗条的生成树(最小生成树入门)
补一下图论知识...题意:给n个点,m条边,求所有生成树中:边权最大值- 边权最小值 的结果最小思路:区间做一遍最小生成树,每次记录成功的左端点和右端点,维护最小值就可以了。#include #include #include #include #define INF 0x3fffffffusing namespace std;const int MAXN = 110;原创 2016-08-17 13:06:58 · 689 阅读 · 0 评论 -
uva 1151 买还是建
题意:给n个点和每个点的坐标,q个套餐,要求n个点联通,q个套餐内可以花费c来使得所有套餐内给出的点都联通,否则需要计算点之间的欧几里得距离。思路:紫书上的题,先用kruskal求一遍最小生成树,然后枚举所有套餐的情况,每选用一个套餐,把套餐内的点之间的距离变为0(可以直接用并查集把这两个点合起来),维护最小值。#include#include#include#define ll l原创 2016-08-17 21:22:22 · 576 阅读 · 0 评论 -
hdu 5806 NanoApe Loves Sequence Ⅱ(二分或尺取法)
题意:有n个数,求有几个区间中第k大的数大于等于m思路:考虑枚举左端点,找一个满足的右端点,求最小满足的那个,就是二分求满足的最左端点。类似于lower_bound,可以看我以前的博客:http://blog.youkuaiyun.com/thehide/article/details/52078438以下是二分的代码:#include #include #include #de原创 2016-08-09 11:17:04 · 519 阅读 · 0 评论 -
hdu 5805 NanoApe Loves Sequence (水题)
题意:n个数,把每个数都取出一遍,问相临两数之差绝对值的期望(结果要乘上n,那就是求所有差的绝对值的和)思路:找原序列3个最大的差的绝对值出来,对每个拿出的数左右之差进行比较,取大者相加。(这个方法有些冗杂,官方题解简洁。)#include #include #include using namespace std;struct node{ int dx;原创 2016-08-09 11:31:58 · 462 阅读 · 0 评论 -
usc oj 1615 The contest
题意:背包问题,加了一个限制条件:某几个物品会相互限制,限制的集合里的物品只能选一件思路:加一个并查集,把集合当成一个物品,像01背包那样记忆化搜索即可。#include #include #include #include #include using namespace std;struct goods{ int v,c;}g[1100];vector vc[原创 2016-08-21 10:17:05 · 607 阅读 · 0 评论 -
hdu 5813 Elegant Construction
题意:有n个点,每个点有能够到达a[i]个点,及出度为a[i],随意输出一种符合要求的方案思路:很容易想到找序列中的出度为0的节点,然后然其他非0的节点指向这个节点,并减1,之后再进行类推,直到最后出度全为0为止题目不难,注意保存答案的数组要开10^6以上。#include #include #include #define maxn 1001000using name原创 2016-08-09 21:58:29 · 444 阅读 · 0 评论 -
uva 116 单向tsp
题意:给一个n行m列的矩阵,要求从第 1 列走到第 m 列,路过每个点时将该点的权值加起来,求最小权值和,并输出路径,若权值相等,输出字典序小的那一种情况。思路:紫书上的题,紫书上用递推的dp,我写了记忆化搜索的方法。实质是一样的,每次dfs保存当前节点的下一个最有路径。再通过 way[dir][i]访问。#include #include #include #define INF原创 2016-08-21 16:02:48 · 531 阅读 · 0 评论 -
hdu 5819 Joint Stacks
题意:模拟两个栈,多了一个合并操作思路:将合并操作后的数据扔到一个优先队列里,然后用一个指标指向不为空的栈(一开始A,B也用了优先队列,可能写搓了,tle了)#include #include #include #include #include using namespace std;struct node{ int val; int num; o原创 2016-08-09 22:10:02 · 670 阅读 · 0 评论 -
hdu 5816 Hearthstone (状压dp)
比赛的时候没想出来..题意:给p,n,m三个数,分别表示敌人的血量,可抽A牌的数量(A牌可以再抽两张),可抽B牌的数量(B牌对敌人造成a[i]点伤害),问现在轮到我抽一张牌(抽了A牌后又可以抽2张,如此往复),问最后打死敌人的概率。样例:第一组:5/15(只能从15张牌里先取1张A牌才能获胜) 第二组:[(5/15) * (10/14) * (4/13)] + [(5/15) *原创 2016-08-10 20:42:45 · 744 阅读 · 0 评论 -
hdu 5821 ball (排序)
题意:给一个状态A问经过m次操作后能否达到B,m次操作分别给出 [l,r],在这个区间内可以随便移动里面的球(在这个区间内任意摆放)。思路:对A状态中的每个球在目标状态B中找到该球颜色出现的位置(如果有颜色相同的,在A中先出现的,对应B中先出现的先后),然后对每个区间排序。最后判整个序列时候和目标序列是否相等。一开始想着需不需要特判球颜色不匹配或者数量不匹配的状态,后来直接用下标设为0解决了。原创 2016-08-11 23:43:07 · 651 阅读 · 0 评论 -
算法竞赛入门经典第九章例题9-1 uva 1025 城市里的间谍
题意:有一个间谍,在1号车站,T时间后,要在n车站会见另一个间谍。在车站容易被人发现,所以他想通过来回做列车来尽可能减少在车站等待的时间(换成和上下站不消耗时间)。求在车站等待的最少时间。思路:在某个车站上时一共有三种选择1、等1分钟;2、搭向右 的列车;3、搭向左的火车。(其中2,3不一定满足)。那么依照书上想法很容易想到dp[i][j]分别表示在第i个时间时在车站j的策略下等待的最小时间。原创 2016-08-12 16:53:55 · 860 阅读 · 0 评论 -
算法竞赛入门经典第九章例题9-2 uva 437 巴比伦塔
题意:给n种砖块,每种可以随便用几次,每块有长宽高,要求把它们磊起来,求放在上面的砖块的长宽严格小于下面的砖块。思路:考虑用dp 紫书上往前翻几页有详细的解法,DAG上的最长路问题,我用了n^2的记忆化搜索,以前用先排序再dp好像可以达到O(n)的效率。#include #include #include #include #define maxn 1100using n原创 2016-08-13 21:10:30 · 664 阅读 · 0 评论 -
hdu 5750 Dertouzos(数论:质数枚举)
大意:求1到n内有多少个数(以下称为x),x的最大因数是d,也可以理解为x能整除d且能被x整除的最大数为d思路:分两种情况:1、当d为质数,直接枚举一个k,使得k * d = x 2、当d为合数,那么枚举的k会小于等于d的最小因子。例如k = 5,d = 12,k * d = 60。其中5*3比12大,且为60的因子(60还有更大因子),15是由5 * 3得来的,即12分解为3原创 2016-07-29 22:27:37 · 616 阅读 · 0 评论 -
hdu 5747 Aaronson (BestCoder Round #84 1001)
至今不懂官方题解是什么意思:答案就是popcount(n)-popcount(\lfloor \frac{n}{2^m} \rfloor) + \lfloor \frac{n}{2^m} \rfloorpopcount(n)−popcount(⌊2mn⌋)+⌊2mn⌋.rfloor popcount是数出一个二进制数中有几个1,如0110就是2原创 2016-07-25 14:50:28 · 690 阅读 · 0 评论 -
poj 1654 area 简单多边形面积(简单题)
题目和描述都挺简单,注意long long 即可//此题注意连x,y都要用long long 不然在+运算的时候会溢出#include #include #include #include using namespace std;typedef long long ll; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9int dx[10] =原创 2016-07-24 20:29:59 · 647 阅读 · 0 评论 -
2016 百度之星资格赛题解(hdu 5685,5686,5687,5688,5689)
此次的百度之星资格赛,题目都比较好理解,就不再给出了。以下是AC的代码,可能存在bug,欢迎大家debugProblem A [http://acm.hdu.edu.cn/showproblem.php?pid=5685] 化简过后的题意就是求一段序列中的区间乘,由于询问次数比较多,直接求乘可能会超时,所以想到前缀乘的想法。preMulit[i]表示前i个序列的前缀乘。若要求[原创 2016-05-23 18:15:10 · 2453 阅读 · 0 评论 -
2015 ACM-ICPC 沈阳网络赛总结
感觉每次网络赛刚开始总是像打了鸡血一样,斗志满满,不过不出3个小时,斗志就被自己的渣渣实力所消磨了,像前两场比赛一样,这场比赛也是有些困难。刚开始做了三个水题之后,就是一路卡了。不过呢,队里的大牛还是刷出了第四题,让我印象最深的还是其中的一个数学题了,题目大概是这样的:现在已经在了http://acm.hdu.edu.cn/showproblem.php?pid=5451Best原创 2015-09-20 17:10:48 · 969 阅读 · 0 评论 -
Hdu 5375 Gray code
纪念一下比赛中第一个出的dp,虽然写的代码并不怎么好,还要加栈。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375 大致题意:给出一段“普通的二进制码”要求转换成“Gray码”每个字母(0或1)对应一个rank,如果对应值是1则可取到,反之则不可取到。求整个二进制码转换成Gray码后的总rank值,两个码之间怎么转换下边有定义,我原创 2015-08-12 13:32:06 · 697 阅读 · 0 评论 -
A + B Problem II(java的简单大数加法)及java环境的配置
最近讲到高精度专题了,于是果断想到了用Java,虽然以前没接触过Java,还是被它的方便性吸引了,下个JDK和eclipsean安装完再配置一下Java环境就可以了,下面稍微提一下环境配置吧(我搞了好久,不过网上好多教程)桌面右键我的电脑(计算机)-->属性-->高级系统设置-->(高级中的)环境变量:在系统变量里面最后要出现这三个变量(有就改一下变量值,没有就新建)变量名变量值原创 2015-08-05 11:34:22 · 1751 阅读 · 0 评论 -
C++STL二分查找函数集及补充
大概有以下几个STL中的二分查找函数原创 2015-08-04 20:53:39 · 1167 阅读 · 0 评论 -
一些DP经典问题:HDU(hdoj) 2126,1176,2546,1159
今天开始做DP(动态规划)的题了,按照刘汝佳大叔的话来说,动态规划不是严格意义上的算法,而是一种解决问题的策略。果然,这个叫策略的东西真是变化多样,不过呢还是有一些规律可以寻找的。像网上有许多大牛们总结的背包问题,还是挺不错的。下面贴几道今天刚做的背包转换的问题,还有个入门级的的lcs题。 第一题:http://acm.hdu.edu.cn/showproblem.php?pid=2126原创 2015-07-27 21:12:51 · 665 阅读 · 1 评论 -
C++利用stl::sort对结构体数组中的字符串成员排序
之前发过的帖中,有讲到过对结构体字符串进行排序的,除了手写之外,便想到用C/C++中的qsort来对结构体数组中的字符串进行排序。但是推广到sort中时,想了好久也没想明白,看看网上这样的帖也比较少,其实还是很好理解的,主要是std::sort的cmp函数要求是bool的返回值,随意抓住这点就可以。问题大概是这样:#include #include #define MAXN 50us原创 2015-07-26 12:54:32 · 3723 阅读 · 0 评论 -
再谈字典树:HDOJ 1671 Phone List(内存释放)
前两天刚发了篇博客,讲的是两道简单的字典树,今天无意间看到了这道题,我觉得有必要再来扩充一下我的字典树知识:合理分配动态内存。记得上C++课的时候,老师讲过,用new创建的指针,程序结束后最好都用delete来删除动态内存,不然会造成内存泄露。然而以前做的题虽然内存开的很大,也没在意。看了今天这道,自己也反思了下,像很多网友说的,不要为了AC而AC,虽然说的很那啥,但这确实是值得我思考的。看一原创 2015-07-24 19:42:50 · 539 阅读 · 0 评论 -
字典树例题介绍:ZOJ 1109 Language of FatMouse,HDOJ 1075hdoj What Are You Talking About
关于字典树,相信还是比较好理解的吧,就是将一次输入中的一些单词,字符串建立成字典。将这些字符每一层存放一个字符,顺序往下查找,在该个字符串(找完该字符串的最后一个字符,即最后一个节点)末尾设置一个节点(一般是存放的东西,比如要翻译过来的单词啊什么的)。下面来分享两道典型的字典树题:1.ZOJ 1109 Language of FatMouse:http://acm.zju.edu.cn/o原创 2015-07-24 10:58:25 · 825 阅读 · 0 评论 -
两道基础线段树简解:HDU 1166 敌兵布阵,HDU 1754 I Hate it
今天刚学了下线段树,感觉如果想快速攻入熟练的程度还是需要时间的,不过看了几题之后发现这些还是有规律的,或许是我们所说的模板吧。但是还是很多难题不能解出来的。还有就是,我感觉上来,树的算法还是比较依靠空间的(不知是不是我做的优化还不够)。写下两道简单的题目,供自己记忆和理解,有兴趣的朋友也可以看看,帮忙斧正斧正。接下来的两道题我也想了很久,看了许多朋友写的代码,好不容易才磨出来。我还要加原创 2015-07-22 20:06:14 · 649 阅读 · 0 评论 -
extendGcd,即扩展欧几里得算法的C++模板化解释
刚刚接触感觉很高大上的“扩展欧几里得算法“,很郁闷,研究了很久。现在感觉能够套模板了,当然这样是远远不够的,不过先写篇博客记录一下最近的动态。帮助自己记忆,也可以帮助大家理解下这个数学算法,当然欢迎各位的斧正和指点,我将不断努力! 首先,明确我们要求ax+by=c中x,y的整数解(至于没有解的情况下边会讨论) 大家应该看到过ax+by=Gcd(a,b)的式子,现在我原创 2015-07-21 20:29:30 · 2606 阅读 · 0 评论 -
KMP算法详解:简洁易懂的KMP算法,下边有许多
转自:http://www.matrix67.com/blog/archives/115(Matrix67原创)KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串转载 2015-07-20 10:08:40 · 902 阅读 · 0 评论 -
HDU 2181 哈密顿绕行世界问题解法
看到挺多人在写博客的,我也想来学习学习,接触ACM也快1年了吧,不过到现在还是个渣渣,不过正在努力提高!写的第一篇博客,哈密顿绕行世界问题:深度搜索问题(深搜)。与一般的地图找点(找出口问题)相似,只是搜索过程中需要记录每次走过的点,便于输出。题目如下:高手别喷,如有雷同,请勿见怪。哈密顿绕行世界问题Description一个规则的实心十二面体,它的 20个原创 2015-07-13 20:41:41 · 852 阅读 · 0 评论 -
计算几何:极角排序(poj 2007 Scrambled Polygon)与简单凸包(poj 1113 Wall)
ps:好久没来写博客了..准备重新开始了、两道简单题poj 2007:http://poj.org/problem?id=2007 按照(0,0)逆时针排序,由于在-180 ~ 180之内,直接叉积极角排序即可/*将p[1]到p[m-1]的点根据p[0]按逆时针方向输出排序*/#include #include #include #define MAXN 60using原创 2016-07-23 10:53:33 · 592 阅读 · 0 评论 -
poj 1873 The Fortified Forest (位运算枚举 + 凸包周长)
题目链接:http://poj.org/problem?id=1873大意:有一片N棵树的森林,要从中砍掉几棵树做成篱笆,把剩下的树围起来输入:给N课树,每棵树的坐标是x,y,每棵树有一个vi和li分别代表砍掉这棵树的花费和砍掉后可做成篱笆的长度输出:被砍掉树的编号(从1开始)、把剩下的树围起来后剩下的篱笆米数。思路:暴力枚举..用01表示哪些树被砍了,维护一个可行的最小值原创 2016-07-23 16:41:14 · 461 阅读 · 0 评论 -
poj 3348 Cows (叉积计算凸包面积)
题意挺简单的,求凸包的面积然后除于50即可。面积:固定某一点,找枚举凸包中的点,用叉积求即可:#include #include #include #include #include #define PI acos(-1)#define MAXN 1000+10using namespace std;int N,L;struct point{ int x,y;原创 2016-07-23 20:52:58 · 460 阅读 · 0 评论 -
hdu 5839 Special Tetrahedron
题意:给n个三维点,判断能构成几个满足以下条件的点:1、至少4条边相等。2、如果刚好4条边相等,那么另外两条不相邻。思路:先将所有的点两两计算一个距离(这里可以不开方),然后将这些直线存下来,每次枚举两条相等的直线(时间复杂度会降低很多,只有在所有直线都长度都相等的情况下才会到达O(n^2),显然这种情况是很少的),然后再比较这两条直线的端点所到另一条直线的端点的距离是否和直线距离相等。当然如原创 2016-08-14 20:36:19 · 582 阅读 · 0 评论