- 博客(31)
- 资源 (8)
- 收藏
- 关注
原创 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 180
原创 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 233
原创 51Nod1117 聪明的木匠(最小生成树)
这道题的求解思路和求最小生成树的思路相似。在队列中找最小的两个数出队相加,加得的数在进队列,直到队列剩一个数为止。#include<iostream>#include<algorithm>#include<cstring>#include<queue>#include<vector>using namespace st...
2018-12-23 16:24:30 108 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 196
原创 51Nod1101 换零钱(动归)
dp[i]:i的换法一共有13种物品,空间是n个。这是一个不求最大价值的01背包问题。具体思路言语表达不出来,看代码应该可以get到。#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<string>using ...
2018-12-23 11:19:37 174
原创 51Nod1099 任务执行顺序(贪心)
刚开始是以为r最大的在前面,排序,结果只对了几个测试案例,然后看了下面的思路,顿悟了。假设只有两个任务,那么就两种结果,先执行a,后执行b。或者先执行b,后执行a。前者的结果是 max(a.oper,a.store+b.oper)后者的结果是 max(b.oper,b.store+a.oper)这个时候可以知道,结果一定是min( a.store+b.oper , b.store+a.o...
2018-12-23 10:43:11 197
原创 51Nod1097 拼成最小的数(技巧排序)
排序规则:两个字符串a,b。如果ab<ba 那就a在b之前。比如a=312,b=31.31231<31312所以312在31之前。排完序就是按照规则输出就行了。#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#i...
2018-12-22 17:38:05 202
原创 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 207
原创 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 176
原创 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 243
原创 51nod1021 石子归并(动态规划)
简单模板题#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;const int INF=1e9+7;int dp[1005][1005],num[1005];int main(){ int n; c...
2018-12-20 14:08:01 223
原创 51Nod1649 齐头并进(dijkstra)
因为每个小镇之间要么有一条铁路,要么有一条公路,所以火车和汽车不可能出现在同一个小镇上,所以求两次最短路径取最大的就行了。#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;const int INF=1e9+...
2018-12-09 12:25:56 192
原创 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 113
原创 51Nod1521 一维战舰(区间问题)
这道题好难啊!第一次做这种类型的题,不知道从何下手,上网看了很多博客,还是看不懂啊,不过确实有一些帮助,这是一道区间问题。把题目转换一下来做:长度为n的线段,现在要分成若干区间,每添加一个断点就求一次区间可以被分成多少个以d为长度的小区间。例如实例1来说样例111 3 354 8 6 1 11n=11,d=4(因为战舰不能接触,所以要+1)插入断点4,区间被分为两份...
2018-12-09 10:56:47 207
原创 51Nod1489 蜥蜴和地下室(dfs)
这道题的思路真的很难想诶。题解:对于一个蜥蜴来说,他的血线是需要减去了n个a和m个b。那么我们可以列举出每个蜥蜴所有的n和m的可能,记录最终的结果,找到最小的结果即可。因为蜥蜴最多才15个,所有这种暴力的方法是可行的,可以用bfs去实现。先杀死两端的蜥蜴。递归的时候一定要注意,去算第i个蜥蜴时,一定要保证第i-1个蜥蜴是死亡的。这样才能保证当你递归到第i-1个的时候,前面的蜥蜴都是...
2018-12-08 11:32:17 218
原创 51Nod1432 独木舟(贪心)
这道题很简单,思路也很好想,因为一只船最多两个人坐,所以就看最重的人和最轻的人体重加一起是否超过载重,如果超过了,船就只有最重的人坐。#include<iostream>#include<algorithm>#include<queue>#include<vector>#include<cstdio>using names...
2018-12-06 15:57:45 198
原创 51Nod 1428 活动安排问题(贪心+优先队列)
这道题真是折磨死我了。一看就知道是贪心,要排序,然后想了一个多小时,脑子真是越想越乱。冷静冷静冷静!慢慢想,最后想到了一个思路:用结构体存时段,按照起点从小到大排序。让第一个时段的终点进优先队列(从小到大排列)中,如果起点大于队头,就说明可以在同一个教室里面上课,就更新队头。最终队列长度就是所需的教室数。ps:提交用c++11编译器#include<iostream>...
2018-12-06 15:39:34 187
原创 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 582
原创 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 164
原创 51Nod1315 合法整数集(位运算)
这道题首先要读懂题。刚开始读的时候不明白or是啥意思,后来历经千辛万苦重要查了很长时间百度才搞明白了or的意思就是‘或’,即位运算符‘|’。运算规则可以看这里C++位运算符(&、 | 、^) 那么这道题要转换成二进制做了。分两种情况:一种是不可能去删除的数,一种是可能要删除的数。1、如果一个数y符合(y|x)>x,则不可能去删除y。即x某一位是0,y集合里面的某个数的...
2018-12-04 17:11:52 228
原创 C++位运算符(&、 | 、^)
位运算符位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:p q p & q p | q p ^ q 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 1 假设如果 A = 60,且...
2018-12-04 16:02:09 51912 3
原创 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 154
原创 对lower_bound的理解
头文件:algorithm lower_bound()返回值是一个迭代器,返回指向比key大的第一个值的位置第一个用法:返回值的下标。#include <algorithm>#include <iostream>using namespace std;int main(){ int a[]={1,2,3,4,5,7,8,9}; printf("%d...
2018-12-03 13:34:00 2994
原创 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 199
原创 51Nod1266 蚂蚁(思维误区)
因为每只蚂蚁相遇时都朝相反方向回去。可以这样考虑,相遇时一只蚂蚁向左,一只蚂蚁向右。相遇后,一只蚂蚁向左,一只蚂蚁向右。可以发现其实可以看做两只蚂蚁相遇后不发生任何变化。#include<iostream>#include<algorithm>using namespace std;int main(){ int n,l; scanf("%d%...
2018-12-02 16:22:08 211
原创 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 351
原创 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 162
原创 51Nod1095 Anigram单词(map+sort)
这道题思路很简单,用map容器维护,把原有的字符串放入一个map,然后排完序后的字符串放入另一个map容器。第一个map容器作用是判断某字符串是否出现过,第二个字符串作用是记录排序后字符串出现的次数。#include<iostream>#include<algorithm>#include<cstring>#include<map>...
2018-12-02 11:42:10 232
原创 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 298
原创 51Nod1092 回文字符串(LCS)
这道题我现在还很迷,只知道把字符串逆序,然后求两个字符串的LCS,最后字符串的长度减去公共子串长度,就是答案。但是为什么是这样呢?我很迷啊。。。。。。。。。。。。。。。who can tell me?#include<iostream>#include<algorithm>#include<cstring>#include<string>...
2018-12-02 10:13:13 217
原创 string 逆序简单方法
#include<iostream>#include<string>using namespace std;int main(){ string a; cin>>a; string b(a.rbegin(),a.rend()); cout<<b<<endl;}
2018-12-02 10:05:05 3906 3
citydata.js
2020-03-22
邮箱依赖的jar包.zip
2020-01-13
简化数据库操作和简化事务相关操作的jar包
2020-01-09
commons.zip
2020-01-08
stackC语言代码
2018-10-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人