![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
51Nod
51Nod
Wonder-King
有好奇心,什么都想学一点。
展开
-
51Nod1091 线段的重叠(贪心)
贪心核心思想:按左端点从小到大,右端点从大到小排序,用一个变量m记录最大的右端点在值,因为左端点从小到大排序的,所以右端点越大,重合越多。先看代码,在看思想,会更好理解点!#include<iostream>#include<cstring>#include<algorithm>using namespace std;struct node{...原创 2018-11-17 17:20:33 · 210 阅读 · 0 评论 -
51Nod1133 不重叠的线段(贪心)
这道题和51Nod1091 线段的重叠(贪心) 这一题很像,同样的思想,如果那一题你理解的话,这道题肯定会写的鸭!#include<iostream>#include<algorithm>using namespace std;struct node{ int x,y;}a[10005];bool cmp(node aa,node bb){ if(aa...原创 2018-12-02 12:19:52 · 154 阅读 · 0 评论 -
51Nod1138 连续整数的和(公式换算)
设长度为t,初始位置为a,有(2a-1+t)*t/2=n,a=(2n+t-t²)/2t。这一题难在如何缩短遍历的长度。1到sqrt(2*n)。这一点我还没理解#include<iostream>#include<cmath>using namespace std;int main(){ int n,i; cin>>n; int flag...原创 2018-12-02 12:48:15 · 339 阅读 · 0 评论 -
51Nod1266 蚂蚁(思维误区)
因为每只蚂蚁相遇时都朝相反方向回去。可以这样考虑,相遇时一只蚂蚁向左,一只蚂蚁向右。相遇后,一只蚂蚁向左,一只蚂蚁向右。可以发现其实可以看做两只蚂蚁相遇后不发生任何变化。#include<iostream>#include<algorithm>using namespace std;int main(){ int n,l; scanf("%d%...原创 2018-12-02 16:22:08 · 201 阅读 · 0 评论 -
51Nod1315 合法整数集(位运算)
这道题首先要读懂题。刚开始读的时候不明白or是啥意思,后来历经千辛万苦重要查了很长时间百度才搞明白了or的意思就是‘或’,即位运算符‘|’。运算规则可以看这里C++位运算符(&、 | 、^) 那么这道题要转换成二进制做了。分两种情况:一种是不可能去删除的数,一种是可能要删除的数。1、如果一个数y符合(y|x)>x,则不可能去删除y。即x某一位是0,y集合里面的某个数的...原创 2018-12-04 17:11:52 · 224 阅读 · 0 评论 -
1413 权势二进制(无语啊这一题)
看了看题就被权势二进制吓住了,这是啥玩意?但是抛开二进制想想,不就是用只有0和1的数字去组成一个数吗?比如98563最高位必然要用9个1相加得到,结果出来了已经!!!!!!#include<iostream>#include<algorithm>using namespace std;int main(){ int maxx=0,num; cin&...原创 2018-12-04 17:20:49 · 153 阅读 · 0 评论 -
51Nod1278 相离的圆(贪心+lower_bound)
将圆的问题变换成线段的问题,按照左端点排序,如果i的右端点小于j的左端点,那么j之后的圆都和他相离。用lower_bound二分查找找到j,否则会超时。#include<iostream>#include<algorithm>using namespace std;struct node { int l,r,x,R;}a[50005];bool cm...原创 2018-12-02 17:36:44 · 192 阅读 · 0 评论 -
51Nod1279 扔盘子(直接模拟过程)
直接模拟过程。输入井宽的时候稍作处理,使其成为递减序列,然后遍历井宽就行了。#include <algorithm>#include <iostream>using namespace std;int main(){ int n,m,i,j; cin>>n>>m; int a[50005],b[50005]; cin>&...原创 2018-12-03 13:48:28 · 148 阅读 · 0 评论 -
51Nod1489 蜥蜴和地下室(dfs)
这道题的思路真的很难想诶。题解:对于一个蜥蜴来说,他的血线是需要减去了n个a和m个b。那么我们可以列举出每个蜥蜴所有的n和m的可能,记录最终的结果,找到最小的结果即可。因为蜥蜴最多才15个,所有这种暴力的方法是可行的,可以用bfs去实现。先杀死两端的蜥蜴。递归的时候一定要注意,去算第i个蜥蜴时,一定要保证第i-1个蜥蜴是死亡的。这样才能保证当你递归到第i-1个的时候,前面的蜥蜴都是...原创 2018-12-08 11:32:17 · 214 阅读 · 0 评论 -
51Nod1417 天堂里的游戏(解方程)
真的这道题我看不出来什么思路,看大佬的代码思路原来just解一个方程而已,有点无语。。。样例的解释很关键有题意可知,不管怎么出硬币,美女要想保证收益,则每次的收益期望是相同的,因此可以列出等式设美女出正面的概率为p,则出反面的概率为(1-p),因此可以列出方程:-a*p+(a+b)/2*(1-p)=-b*(1-p)+(a+b)/2*p;解得p=(a+3b)/(4a+4b);剩下的只需...原创 2018-12-06 13:55:48 · 561 阅读 · 0 评论 -
51Nod1095 Anigram单词(map+sort)
这道题思路很简单,用map容器维护,把原有的字符串放入一个map,然后排完序后的字符串放入另一个map容器。第一个map容器作用是判断某字符串是否出现过,第二个字符串作用是记录排序后字符串出现的次数。#include<iostream>#include<algorithm>#include<cstring>#include<map>...原创 2018-12-02 11:42:10 · 223 阅读 · 0 评论 -
51Nod1094 和为k的连续区间(暴力)
求出前缀和,后缀和,总和,如果k=总和-前缀和-后缀和,就输出i,j。前缀和后缀和一定要定义成long long类型,不然会溢出。#include<iostream>#include<algorithm>#include<cstring>#include<string>using namespace std;typedef lo...原创 2018-12-02 11:04:56 · 293 阅读 · 0 评论 -
51Nod1182 完美字符串(stl:map)
这道题思路就是找到相同的字母的数量,然后排序,算出结果。找出相同的数量,用stl中map结构最快。排序的话用优先队列维护。然后map,优先队列不会,可以看看我之前的学习stl的博客。自我感觉stl真的很好用!STL学习总结 #include<iostream>#include<string>#include<map>#include<...原创 2018-11-17 18:36:13 · 175 阅读 · 0 评论 -
51Nod1283 最小周长()
思路很简单啊,一个一个的试,直到找到后面的数大约前面的数为止,前一个成功的数就是答案。我的语言。。。我也不知道在说些什么。。。看代码吧!#include<iostream>#include<string>using namespace std;int main(){ long long s; cin>>s; int a=1,b=s; ...原创 2018-11-17 18:58:12 · 246 阅读 · 0 评论 -
51Nod1289 大鱼吃小鱼(stl:stack)
这道题首先要读懂题意,其实题目上表述的很模糊,并没有说鱼的相对位置。实际上鱼是有相对位置的,根据读入数据的先后表示鱼的相对位置,先读入的鱼的数据的位置在后读入鱼的数据的左边。读懂题之后,这道题就简单了,直接模拟过程就ok了,可以用堆栈来维护数据。如果鱼一个向右,一个向左就要判断是否大鱼吃小鱼的情况,判断是否进栈的问题,自己想想很简单的。ac代码:#include<iostrea...原创 2018-11-18 11:02:13 · 192 阅读 · 0 评论 -
51Nod1305 Pairwise Sum and Divide(1和2的利用率)
这道题就是找规律的问题。可以试试各种数据发现每次计算的值只有0,1,2。1和1计算是2,1和除1以外任何数,2和2计算是1,其他计算都是0.所以只要记录2和1的次数就能算出总和了。#include<iostream>#include<cmath>#include<algorithm>using namespace std;typedef lon...原创 2018-11-18 11:31:15 · 96 阅读 · 0 评论 -
51Nod1344 走格子
没什么好说的,就是简单。。。#include<iostream>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;int main(){ int n; cin>>n; ll a[50005]; for(int i=0;i&l...原创 2018-11-18 11:49:04 · 301 阅读 · 0 评论 -
51Nod1347 旋转字符串
这道题其实很简单,重点是要读懂题!!!!!!一个对串不管用旋转函数旋转几次,仍然是对串。#include<iostream>#include<string>#include<algorithm>using namespace std;typedef long long ll;int main(){ string a; while(ci...原创 2018-11-18 15:08:25 · 150 阅读 · 0 评论 -
51Nod1381 硬币游戏(什么智障题?)
真的不知道这道题想干啥的!简单的分析一下概率,压线2*r的情况n次,2*r的情况1次,也就是概率为0,可以忽略。#include<iostream>#include<string>#include<algorithm>using namespace std;typedef long long ll;int main(){ int T;...原创 2018-11-18 15:20:35 · 208 阅读 · 0 评论 -
51Nod2020 排序相减
对于水题没什么说的,直接暴力就行。#include<iostream>#include<string>#include<algorithm>using namespace std;typedef long long ll;int fun(int a){ if(a==0) return 0; char str[4]; sprintf(s...原创 2018-11-18 15:43:20 · 204 阅读 · 0 评论 -
51Nod1092 回文字符串(LCS)
这道题我现在还很迷,只知道把字符串逆序,然后求两个字符串的LCS,最后字符串的长度减去公共子串长度,就是答案。但是为什么是这样呢?我很迷啊。。。。。。。。。。。。。。。who can tell me?#include<iostream>#include<algorithm>#include<cstring>#include<string>...原创 2018-12-02 10:13:13 · 211 阅读 · 0 评论 -
51Nod 1428 活动安排问题(贪心+优先队列)
这道题真是折磨死我了。一看就知道是贪心,要排序,然后想了一个多小时,脑子真是越想越乱。冷静冷静冷静!慢慢想,最后想到了一个思路:用结构体存时段,按照起点从小到大排序。让第一个时段的终点进优先队列(从小到大排列)中,如果起点大于队头,就说明可以在同一个教室里面上课,就更新队头。最终队列长度就是所需的教室数。ps:提交用c++11编译器#include<iostream>...原创 2018-12-06 15:39:34 · 178 阅读 · 0 评论 -
51Nod1432 独木舟(贪心)
这道题很简单,思路也很好想,因为一只船最多两个人坐,所以就看最重的人和最轻的人体重加一起是否超过载重,如果超过了,船就只有最重的人坐。#include<iostream>#include<algorithm>#include<queue>#include<vector>#include<cstdio>using names...原创 2018-12-06 15:57:45 · 191 阅读 · 0 评论 -
51Nod1127 最短的包含字符串(尺取法)
尺取法:由两个指针l,r移动维护,l到r为符合要求的长度,不断移动l和r,直到r到头为止。#include<iostream>#include<algorithm>#include<cstring>#include<string>#include<vector>using namespace std;const int ...原创 2018-12-23 17:34:31 · 225 阅读 · 0 评论 -
51Nod 1163 最高的奖励(贪心)
按照奖励从大到小排序比如测试案例:70 60 50 40 30 20 10 4 2 4 3 1 4 6用一个数组ans[i]记录要完成的任务: 先将70放到4的位置,然后将60放到2的位置,然后将50放到4的位置,但是4的位置已经有70了,就往前找空位即放到3的位置。就是这个思想,比较像哈希函数解决冲突的开放地址法。#include<...原创 2018-12-23 18:06:39 · 172 阅读 · 0 评论 -
51Nod1246 罐子和硬币
有n个罐子,有k个硬币,每个罐子可以容纳任意数量的硬币。罐子是不透明的,你可以把这k个硬币任意分配到罐子里。然后罐子被打乱顺序,你从外表无法区别罐子。最后罐子被编上号1-n。每次你可以询问某个罐子,如果该罐子里有硬币,则你可以得到1个(但你不知道该罐子中还有多少硬币),如果该罐子是空的,你得不到任何硬币,但会消耗1次询问的机会。你最终要得到至少c枚硬币(c <= k),问题是给定n,k,c,...原创 2019-01-21 00:30:13 · 156 阅读 · 0 评论 -
51Nod1267 4个数和为0
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No"。收起输入第1行,1个数N,N为数组的长度(4 <= N <= 1000)第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)输出如果可以选出4个数,使得他们的和为0,则输出"Yes",否则输出"No"。输入样例5原创 2019-01-22 15:35:37 · 156 阅读 · 0 评论 -
51Nod1396 还是01串
1396 还是01串1 秒 131,072 KB 20 分 3 级题给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n, 并且子串s[0..k - 1]中的0的个数与子串s[k..n - 1]中1的个数相等。 注意:(1) 如果k = 0, s[0..k - 1]视为空串(2) 如果k = n, s[k..n - 1]视为空串(3) 如...原创 2019-02-10 17:48:44 · 192 阅读 · 0 评论 -
51Nod1418 放球游戏
1418 放球游戏1 秒 131,072 KB 20 分 3 级题有N个球排成一排,每个球都是R、G、B三种颜色之一。现在想重新排列这一排球,你要重复以下过程N次:1)从原来的那排球中的最左侧取出一个球;2)将取出的求插入新的球排列的任意位置,即可以放在最左或最右端,也可以插入那排球的任意两个相邻球之间;3)计算这轮得分,如果是第一个球那么得0分;如果放在两端(最左或最右端)得分...原创 2019-02-10 19:24:00 · 199 阅读 · 0 评论 -
51Nod1536 不一样的猜数游戏
1536 不一样的猜数游戏1 秒 131,072 KB 20 分 3 级题瓦斯亚和皮台亚在玩一个简单的游戏。瓦斯亚心中想一个整数x,它是1到n之间的整数。然后皮台亚尝试着猜这个数字。皮台亚每次问一个形如这样的问题:这个x是y的倍数吗?这个游戏的流程是这样的:首先皮台亚把所有他想问的形如上述的问题都问出来(当然他也可以不问任何问题),然后瓦斯亚针对每一个问题给出yes或no的答案...原创 2019-02-11 18:34:35 · 187 阅读 · 0 评论 -
51Nod1572 宝岛地图
1572 宝岛地图1 秒 131,072 KB 20 分 3 级题勇敢的水手们到达了一个小岛,在这个小岛上,曾经有海盗在这里埋下了一些宝藏。然而,我们的船快抛锚了,与此同时,船长发现藏宝图的一角被老鼠咬掉了一块。 藏宝图可以用一个n×m大小的矩形表示。矩形中的每一小块表示小岛中的一小块陆地(方块的边长为1米)。有一些方块表示的是海,这些块人是不能通过的。除了海不能走,其它的小方...原创 2019-02-11 21:34:30 · 211 阅读 · 0 评论 -
51Nod1631 小鲨鱼在51nod小学
1631 小鲨鱼在51nod小学1 秒 131,072 KB 20 分 3 级题鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学。并依靠算法方面的特长,在班里担任了许多职务。 每一个职务都有一个起始时间A和结束时间B,意为小鲨鱼在[A, B]时间内,担任了某职务(inclusively)。 现在给定小鲨鱼的职务履历表,你可以高效的给出小鲨鱼在某天担任了哪...原创 2019-02-12 18:50:27 · 201 阅读 · 0 评论 -
51Nod1117 聪明的木匠(最小生成树)
这道题的求解思路和求最小生成树的思路相似。在队列中找最小的两个数出队相加,加得的数在进队列,直到队列剩一个数为止。#include<iostream>#include<algorithm>#include<cstring>#include<queue>#include<vector>using namespace st...原创 2018-12-23 16:24:30 · 99 阅读 · 1 评论 -
51Nod1102 面积最大的矩形
正常思路想就好了。求出每一块的最大面积,在比较出最大值。时间复杂度大概会比o(n^2)小点,但是最坏情况还是o(n^2),最好情况是o(1),平均下来应该是o(nlog2n)#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include&...原创 2018-12-23 12:08:58 · 189 阅读 · 0 评论 -
51Nod1521 一维战舰(区间问题)
这道题好难啊!第一次做这种类型的题,不知道从何下手,上网看了很多博客,还是看不懂啊,不过确实有一些帮助,这是一道区间问题。把题目转换一下来做:长度为n的线段,现在要分成若干区间,每添加一个断点就求一次区间可以被分成多少个以d为长度的小区间。例如实例1来说样例111 3 354 8 6 1 11n=11,d=4(因为战舰不能接触,所以要+1)插入断点4,区间被分为两份...原创 2018-12-09 10:56:47 · 197 阅读 · 0 评论 -
51Nod1596 搬货物(进位)
2的幂为1和1时,可以进位成2的幂为2。根据这一个技巧,把幂存在数组里面进位即可,最终非0的位都要搬一次。#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;const int N=1e6+5;int a[2...原创 2018-12-09 11:19:06 · 101 阅读 · 0 评论 -
51Nod1649 齐头并进(dijkstra)
因为每个小镇之间要么有一条铁路,要么有一条公路,所以火车和汽车不可能出现在同一个小镇上,所以求两次最短路径取最大的就行了。#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;const int INF=1e9+...原创 2018-12-09 12:25:56 · 189 阅读 · 0 评论 -
51Nod1043 幸运号码(动归数位dp)
我们用dp[i][j]表示的是前i位的数字和为j,j最大为9*i ,前i位每位都是9的时候。 这样假如我们求得了dp[n][1]一直到dp[n][9*n]的数字,那么最终结果就是dp[n][1] * dp[n][1] + ... + dp[n][9*n] * dp[n][9*n] . 但是这里还有一个问题就是,dp[i][j] 表示的是前i位的数字和为j,但是我们知道前面的那个 i...原创 2018-12-22 11:04:26 · 240 阅读 · 0 评论 -
51Nod1065 最小正子段和(前缀和)
先求前缀和,然后在排序,序列最小的和可能存在于相邻的两个数之差,关键在于如何判断相邻的两个人能否构成序列。比如-9 -2 8 7 6前缀和为-9 -11 -3 4 10排序后:-11 -9 -3 -4 10-11和-9就构不成序列,因为-9的下标在-11的前面.当然序列最小的和还可能存在于前缀和.#include<iostream>#include<a...原创 2018-12-22 16:09:07 · 169 阅读 · 0 评论 -
51Nod1096 距离之和最小(水题)
找中位数就行了。#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<vector>using namespace std;typedef long long ll;int main(){ ll i,n,a[10...原创 2018-12-22 16:22:11 · 202 阅读 · 0 评论