- 博客(53)
- 资源 (28)
- 收藏
- 关注
原创 51Nod-1605-棋盘问题
ACM模版描述题解这是我见过最感人的博弈论题目……无需多谈,规律十分明显~~~代码#include <iostream>using namespace std;//const int MAXN = 105;int main(int argc, const char * argv[]){// freopen("/Users/zyj/Desktop/input.txt", "r", stdin
2016-09-30 13:31:50 462
原创 51Nod-1509-加长棒
ACM模版描述题解今天做了两个题,都有些懵,这道题一开始想着要dp,可是,屡试不通……还是老办法,找题解喽,毕竟思而不学则殆,是需要学习一下这种题型的解题思路了。看到一篇题解,看得不是完全懂,大体的算法思路懂了,可是推导的过程有些懵逼……题解如下(题解来自ITAK大牛的博客):这个题目直接想的话没法做,所以就是间接的想,也就是采用容斥原理从反面来想, 也就是说用总数减去不能够满足三角形的方法数,那
2016-09-29 20:38:59 805 1
原创 51Nod-1503-猪和回文
ACM模版描述题解万万没想到,这是CF div.2 E题,在51才放在了4级算法,这个时间真奇妙,某大牛说的有趣:难道是通货膨胀的厉害?很好地一道dp题,很无奈,我不会,是参考他人思路写的,很强势!!!一开始想到了dp,也想到了从两端向中间查找,但是细部的处理没有想到合适的手段,还是道行浅, 于是看了一个道行深的思路: 一个点走,相当于两个点分别从(1,1)向下向右走,另一个从(N,M)向上向左
2016-09-29 18:46:41 1285 1
原创 初探汇编
想学汇编不是一天两天了,总感觉不会汇编的程序猿不是称职的程序猿,也只有懂得这些底层的原理,才能更好地领悟计算机!!!(其实最重要的是汇编可是装逼利器啊,毕竟那么多程序猿不懂)学习汇编,并没有想要用汇编写驱动、系统内核之类的东西,因为这真的是一个浩大工程,我也不想造车轱辘,主要本着深度剖析程序内在的想法,一直跃跃欲试!从大一上学期我就打定主意要学汇编,而一直苦于没有时间,算法的学习占用了我大量时间,终
2016-09-29 04:35:15 504
原创 51Nod-1491-黄金系统
ACM模版描述题解拿到这种题,不用多想,先枚举一些q^i,可以发现在某种程度上其符合斐波那契数列…… q^0用A表示,q^1用B表示, 我们可以发现,每一个数都可以用xA + yB表示, 而这里的x和y在一定程度上都符合斐波那契数列。 这也就给了我初始的想法,能否遍历一遍, 遇见相连两个都是1的时候就减去这两个1继而在高位添1, 就着这个想法尝试,这时注意到n-i的问题, 于是乎,想了
2016-09-29 03:49:48 622 2
原创 51Nod-1490-多重游戏
ACM模版描述题解哎,纳什真是给我出了一个难题啊~~~博弈论简单的还能推算出来,稍微一难,我就陷入了懵逼死循环中……这道题可以很清楚的分析到是Trie + 博弈,首先建立Trie树很容易,接着分析可以得到,先手拿到叶子节点的必赢,但是这个游戏一共需要进行k轮,并且第二轮开始每一轮的先手都是上一轮的败者,所以这个问题俨然变成了两个游戏,一个是尽全力输,一个是尽全力赢。剩下的也就好分析了,根据两人的必输
2016-09-28 19:10:00 497
原创 51Nod-1487-占领资源
ACM模版描述题解一开始,没想到啥好主意,直接暴力(One),TLE了一半,好心酸,越往后做,越发现51Nod对效率的不懈追求!!!最后,因为知识匮乏,所以,只好找了大牛的题解,找到了qwb的博客,讲了一种利用RMQ预处理后复杂度为O(n * m * log(n * m))的解法(Two),感觉十分有趣,开发思维啊这题~~~先预处理每一个塔所能得到的最多资源, 然后枚举第一个塔的位置,那么第二个塔
2016-09-28 14:28:54 515
原创 51Nod-1484-猜数游戏
ACM模版描述 题解算法思路很容易想,就是区间交和区间并问题,然而我却坑死在了迭代器的陷阱上!!!这里出现的问题主要是迭代器的陷阱——迭代器失效。如果用迭代器删除指定位置的元素,那么该操作返回的是一个迭代器,并且此迭代器指向删除元素的下一个元素;如果是删除某范围内的元素时,返回值也是一个迭代器,指向最后一个被删除元素的下一个元素。代码#include <iostream>#include <al
2016-09-27 21:01:14 696
原创 51Nod-1478-括号序列的最长合法子段
ACM模版描述题解一拿到题,就想到了一个十分低级的做法,先正着遍历一遍,遍历过程中再倒着遍历(One),不负众望,TLE了四组数据。无奈,想了一下,只好使用栈来实现了,先预处理一遍,将括号匹配在一起,然后检索最长串即可(Two)。代码One:// TLE//#include <stdio.h>//#include <string.h>////const int MAXN = 1e6 + 5
2016-09-26 18:11:51 701
原创 51Nod-1473-等幂映射
ACM模版描述题解根据题意,可以发现,这里一定存在循环节,所以我们先搞定循环节,求所有循环节的LCM即可,有一些细节问题需要格外注意(Two)。一开始,比较懒,直接暴力枚举解题,然后很自然的TLE了,T了两组数据(One),哎,不得不说,51Nod的数据强度还是很强的。代码One:// TLE//#include <iostream>////using namespace std;///
2016-09-26 01:21:37 507
原创 算法马拉松18-B-非010串
ACM模版描述题解这道题一开始一看,觉得是dp,后来发现数据太大,dp要死人的,于是想到了矩阵快速幂,(在网上看到有人说可以dp,不懂他是怎么做的,但是感觉一定会超时啊)。这里首先我们需要找到递推式: ……01:An ……10:Bn ……00:Cn ……11:Dn 由此可以推出: An+1=Bn+Cn Bn+1=Dn(因为需要排除010的串) Cn+1=
2016-09-25 17:03:01 398
原创 算法马拉松18-A-染色问题
ACM模版描述题解挺有意思的一道题,一开始看到完全图,有些懵逼,想难了,仔细分析是一道找规律题。题中讲,需要两种组合一一对应,那么每种颜色出现的次数应该相等,那么只有奇数时,边数才会等于n的倍数,所以当n为偶数时,直接输出”No solution”,否则,可以按照样例的形式构造(投机取巧喽)。代码#include <iostream>using namespace std;int main(int
2016-09-25 12:45:43 438
原创 51Nod-1464-半回文
ACM模版描述题解做这道题时,满满的套路……我只想问,论赵闲,有多无耻!!!这道题,常规解法是利用字典树解,但是,并不像想象中那么容易……用字典树解后,一提交,T了两组,很无奈,查看测试数据发现,全部都是a或者b,那么也就好理解了,一定是在判断半回文串和半回文串添加字典树的过程运算量太大了,但是一时又没有想到什么好的优化手段,于是乎,我灵光乍现,直接特判(作弊)过了(One)……后来一看某大牛的代码
2016-09-25 04:12:02 840
原创 ACM/ICPC竞赛之STL--set
ACM模版set是与集合相关的容器,STL为我们提供了set的实现,在编程题中遇见集合问题直接调用是十分方便的。setset模版类的定义在头文件<set>中。定义set对象的示例代码如下:set<int> s;set<double> ss;set的基本操作:s.begin() // 返回指向第一个元素的迭代器s.clear() // 清除所有元素s.count()
2016-09-25 00:52:38 2986
原创 51Nod-1460-连接小岛
ACM模版描述题解一道经典的贪心问题,只要将岛屿的数据转化为桥长度范围的数据,接着贪心查找即可,这里使用二分查找,用multiset数据结构优化。一开始,大意了,忘了一个条件,以为任意两岛之间都可以架桥,结果想差气了,想到图论了~~~粗心大意害死人啊!!!代码#include <iostream>#include <algorithm>#include <set>#include <cstdi
2016-09-23 21:04:10 687
原创 51Nod-1455-宝石猎人
ACM模版描述题解十分不错的dp,需要考虑到空间优化问题,否则会爆炸~~~可以使用偏移量的方法(One),也可以预处理跳跃的区间(Two)。当然方法多种多样,貌似使用记忆化搜索也可以过。代码One:#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long long ll;const
2016-09-23 18:52:56 407
原创 51Nod-1453-抽彩球
ACM模版描述题解很好地一道题,可以用dp解(Two),也可以用插空法(One),然而,由于dp实在不好理解,我也没能彻悟,所以这里介绍一下插空法。从后往前推,把第k种颜色放在最后一个,剩下的k球,有C(剩余的空位置,k球总数-1)种放置方法,然后讨论第k-1种,以此类推下去……由于组合比较大,需要用乘法逆元,也可以直接套Lucas。至于dp的解法,我看得不是太懂,具体的思路可以去大牛光速小子051
2016-09-22 16:33:17 608
原创 51Nod-1449-砝码称重
ACM模版描述题解思量了许久,未能解决,于是找了一下题解,茅塞顿开,原来还可以如此优雅!如果让一些砝码表示m的话,只需要将m转化为w进制数,然后要求每一位不是0就是1,然而这里可以利用天平使m加上一个由0、1组成的w进制数等于另一个由0、1组成的w进制数,也就是说,转换成了m可以表示成两个由0、1组成的w进制数的差。代码#include <stdio.h>int w, m;int main(){
2016-09-22 14:14:07 697
原创 51Nod-1448-二染色问题
ACM模版描述题解万万没想到,这里是贪心,十分巧妙的思路,不容易讲解,但是代码还是比较容易理解的,所以,好好看看代码吧~~~代码#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MAXN = 22;char s[MAXN][MAXN];int N, K;int vis[MAXN
2016-09-22 02:12:14 557
原创 51Nod-1445-变色DNA
ACM模版描述题解好诡异的一道题,完全跑偏了思路,一开始竟然尝试着用dfs去做,后来搞懂了题意,原来是一道最短路的变形题……用Dijkstra算法即可A之。还是我太天真了~~~代码#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int INF = 0x3f3f3f3f;const i
2016-09-21 13:07:14 427
原创 51Nod-1441-士兵的数字游戏
ACM模版描述题解感觉这个题卡数据卡的真厉害……一直T~~~最后终于打了一个擦边球过了,基准时间是6s,我用了5s96,真是一件恶心的事。我的做法比较逗逼,先素数筛,然后合数分解,接着预处理一下,最后直接输出res[a] - res[b]即可了(One)。看了一下排行榜,发现第一名好厉害,只用了不到1s,Orz~~~自信看,发现和我的算法思路完全一样,不一样的是,我的只是简单的将几种算法和处理手段机
2016-09-20 15:53:08 398
原创 51Nod-1438-方阵与完全平方数
ACM模版描述题解一开始感觉是贪心,但是怕会超时,所以想偏了,企图用数论相关算法解,可是找了半天并没有发现啥特别的规律,所以一直懵逼了一个小时……恶心到我了。看了一下官方题解,发现果然是贪心,并且只有当n等于1时,无解,其他情况均有解,dfs即可。如下官方题解:(代码是参考了一下大牛们的代码~~~)代码#include <iostream>#include <cmath>#include <cs
2016-09-20 01:04:14 614
原创 51Nod-1435-位数阶乘
ACM模版描述题解这道题猛一看比较咋呼人,但是仔细分析下来,会发现十分简单,关键是拆解每一位数,拆解成质因数的形式,然后统计每个质因数一共出现的次数,在寻找正整数X(ans[])时,只要按从大到小的顺序凑质因数就可以了,凑够了也就是最后的答案了。代码#include <iostream>using namespace std;const int MAXN = 16;const int MAXM =
2016-09-19 13:32:44 348
原创 51Nod-1434-区间LCM
ACM模版描述题解这里我们可以肯定的是M一定不大于2 * N,这里我们只需要考虑所有质因子最高阶对应的数字即可,求得这些数字中最大的,结果一定是这个数的二倍(这里的二倍和前边的2 * N道理是一样的)。为啥只用考虑最高阶呢?因为低阶的一定都能够由多个数字提供因子组成,所以可以不用考虑(One)。不管用什么办法实现,貌似都需要线性筛,筛选出小于N的所有素数,不同的就是ans的求法,花样很多,但是都是和
2016-09-18 23:39:20 1262
原创 大二前期工作计划以及近期具体安排
大学已然过去四分之一,我也对这里更加了解了一些,接下来,大二,也是最最重要的一年,因为大二不再像大一那般迷茫,也不像大三那般担心明天何去何从~在这可以绝对自主的日子里,我想,我应该比大一更加认真,更加努力,如果不是这样子,我又该何去何从?父亲为了给我更好地学习环境,每个月多支出1000RMB,让我在外租房住,三年大概要三万有余,这也是无奈之举啊,毕竟谁也不想和一个神经质并且从小缺乏父爱的人同在一个屋
2016-09-18 17:02:47 1465 9
原创 51Nod-1422-沙拉酱前缀
ACM模版描述题解看到这个题,有些懵逼,没有做过类似的问题,看到讨论去有人说二分,没想通,又看到有人说离线处理,很不好意思,我概念不行,一直不懂啥叫离线,啥叫在线,于是问了问学姐,学姐说离线就是读入所有数据后再处理,而在线就是边读入边处理~如梦初醒,原来并不是什么高深的概念,我们平时做题经常用到,只是自己不知道而已。顺着讨论区的提示,尝试着搞出来了。先将所有的操作信息都读入,存一个pos[]数组表示
2016-09-18 13:30:47 602
原创 51Nod-1420-数袋鼠好有趣
ACM模版描述题解Water!!!没想到这都是四级题~~~这让人情何以堪。直接排序,二分查找一次,然后贪心即可。代码#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int MAXN = 5e5;int si[MAXN];int bs(int l, int h, int v){
2016-09-18 11:27:49 621
原创 51Nod-1419-最小公倍数挑战
ACM模版描述题解一道数学水题,放在四级题真是高估它了!!!规律很明显,先特判1和2的情况,接着,当n为奇数时,结果一定是n * (n - 1) * (n - 2),剩下的情况又分为两种,那就是当n为3的倍数时,结果一定是(n - 1) * (n - 2) * (n - 3),如果都不满足,则结果一定是n * (n - 1) * (n - 3)。代码#include <iostream>using
2016-09-18 00:40:25 320
原创 51Nod-1412-AVL树的种类
ACM模版描述题解经典的dp,而我却没有想到……树的深度不大,可以实现暴力枚举深度。 设dp[i][k]表示结点个数为i,深度为k的AVL个数。那么,状态转移方程为(j表示右子树的结点数目): 1、dp[i][k] += dp[i - 1 - j][k - 1] * dp[j][k - 1] 2、dp[i][k] += 2 * dp[i - 1 - j][k - 2] * dp[j][k
2016-09-16 18:55:32 792
原创 51Nod-1405-树的距离之和
ACM模版描述题解根据题意,这是一颗树,所以每两点之间的路径一定是唯一的。这里让求所有点到第i个结点的距离和,其实也就是其他所有结点到第i个结点的距离和。通过观察发现,只要我们找到了一个点对应的结果,那么其他所有的点都可以通过这个结果扩展出来,利用边的关系。比如说,我们知道了第一个结点对应的结果,并且知道第一个和第二个存在连边,那么一定可以通过第一个的结果求得第二个结果……以此类推。所以,我们先df
2016-09-16 02:02:45 1302
原创 51Nod-1400-序列分解
ACM模版描述题解这道题题面上有一个陷阱,这里的子序列插在一起要能组成原序列,也就是说对顺序有一定要求,不能随便乱取。所以可以用dfs解决,但是如果不剪枝的话有可能会超时。代码#include <iostream>#include <algorithm>using namespace std;const int MAXN = 41;int n;int a[MAXN];int b[MAXN];
2016-09-15 22:41:43 483
原创 51Nod-1391-01串
ACM模版描述题解看到很多人都说这道题是哈希+dp,我看了好久才明白这里所谓的哈希只是一种思想~~~有些傻了,之前一直不知道这种思想叫做哈希。我的dp也有些差劲了,需要加强。以下思路是借鉴一个大牛的(ID:追梦赤子心):首先,我们可以预处理开头到第i个位置0的数量大于1的数量的串的最长长度sum_0[i],同理,预处理第i个位置到结尾1的数量大于0的数量的串的最长长度。那么,我们可以发现当结果[i,
2016-09-15 19:17:05 501
原创 51Nod-1390-游戏得分
ACM模版描述题解根据题意,不难发现这是一个等差数列,一定用到了等差数列的相关性质。先考虑输出-1的情况,我们则需要考虑x+y的规律,以及所有能出现的x的规律。这个不难发现,x+y一定是完全平方数,而x可以为1到n^2中除去2的任何一个数,那么我们就很容易搞定-1的情况。接着,通过贪心,我们知道,想要数目最少,必须尽量选择后边的数,那么我们可以判断后边的数至少有几个才能比x大,那么就一定存在对应的情
2016-09-14 19:36:16 476
原创 51Nod-1388-六边形平面
ACM模版描述题解这道题思路还是比较简单的,关键在于细节问题,不然就会像我一样一直被一个测试点卡死,粗心啦~~~算法是常规的dfs(我原本企图不用dfs,然而好麻烦)首先,经过分析可以知道,颜色至多需要三种,0、1、2这三种结果不用过多分析,需要分析的是3这个答案的情况。 答案为3的情况分为两种, 第一:存在三个格子有公共顶点的情况; 第二:存在环,且环的长度为奇数。这里存在一个隐藏的条件,当
2016-09-13 12:41:35 677 2
原创 51Nod-1366-贫富差距
ACM模版描述题解并查集+Floyd算法~根据题意,无穷大的情况连通块儿一定超过1个,所以先用并查集过一遍,如果是一个连通块儿,那么再用Floyed算法,求任意两点之间的最短距离,默认每条路径长度为1,最后从所有距离中查找最大的距离,乘以d即为结果。代码#include <iostream>#include <cstring>#include <cstdio>using namespace st
2016-09-13 01:47:06 792
原创 51Nod-1358-浮波那契
ACM模版描述题解一看到这道题题目,第一感觉是错别字,因为fei打成fu也不是不可能。然而一细看,发现真的是浮。但是比较直观的发现,这道题和斐波那契有些许关联。首先,分析数据范围,十分大,一般的递推不可能过,这时可以想到,求十分大的斐波那契数时使用的方法是矩阵快速幂,那么这道题也许也适用,但是这里是浮点型,怎么解决呢?于是乎,根据Float-Bonacci的定义我们可以发现一个潜在条件,那就是浮点的
2016-09-12 16:46:32 494
原创 51Nod-1351-吃点心
ACM模版描述题解这道题是贪心问题,分为两种情况贪心: 第一种是选取的盒子左边界之和≥X; 第二种是C-没有选取的盒子的右边界之和≥X,即C-N个盒子右边界之和+选取的盒子右边界之和≥X。所以,分别按照左边界和右边界进行从大到小排序,逐个选取,获取两个结果,从这两个结果中取最优即可。代码#include <iostream>#include <algorithm>using namespace
2016-09-12 11:48:13 389
原创 杂谈
已经两天没有刷题了,内心满满的罪恶感……开学了,为了新学期新气象(我瞎咧咧的),学校的一个心理咨询中心需要做一个web,我被分配做后台的工作,有些无奈,真心不想做,因为我感觉这种事儿太鸡肋,会让我分心,无法专心学习算法,但是又碍于情面,不干不行……依稀记得,去年12月开始学的PHP,有人说,PHP是最好的语言,我想,这句话极其幽默的了,学了一个月,把PHP的基础全部学完了,看着高洛峰讲的兄弟连PHP
2016-09-12 03:36:22 697 3
原创 51Nod-1350-斐波那契表示
ACM模版描述提解这道题,解法十分巧妙,思路不是自己想起来的,对斐波那契数列的性质不够了解,在相关讨论中找到一个ID为@wc的大牛的思路,然后实现了一下,大牛思路如下: 斐波那契数列定义为 f[0]=f[1]=1, f[i]=f[i-1]+f[i-2] (i>=2) 只需打表前90项 从f[i]开始的连续f[i-1]项 的最短表示F[t] 是有规律的。 其前f[i
2016-09-09 19:15:25 1047
原创 51Nod-1337-翻转游戏
ACM模版描述题解首先逐关进行两次遍历,遍历第一遍,查找到开关操作是否需要,再遍历一遍,检索?,如果遇见?则向下一组查找对应位置,直到查找到最后一关卡,或者不是?的关卡,这时,根据此关卡是否进行相关开关操作来改变后边关卡的对应位置的状态,具体有三大种五小种状态,逐一分析,逐一修正即可。代码#include <iostream>#include <cstring>using namespace st
2016-09-09 16:42:42 563
ACM模板-f_zyj 更新(内含 v 1.1 和 v 2.1 的 .pages 格式和 .pdf 格式)
2017-09-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人