51nod
柚子的power
这个作者很懒,什么都没留下…
展开
-
51nod 1027 大数乘法
题目解题思路:该题只要求两个正数的乘法,所以不用考虑符号。根据乘法的特点,首先求出结果对应位上的数字,若大于9,则进位C[i]/10;原位上的数字变为C[i]%10;最后输出的时候注意从非零位开始输出。源码附上:#include <iostream>using namespace std;char a[1001],b[1001];int aa[1001],b...原创 2018-11-25 15:39:27 · 123 阅读 · 0 评论 -
51nod 1085 背包问题
题目解题思路:对于每个物体都要判断放入背包或者不放入背包。i表示判断到第i个物体,j表示背包容量,dp[i][j]表示背包中现有物体的价值。刚开始感觉这道题很难懂,一直觉得等式前面的dp[i][j]和等式后面的dp[i][j]不是同一个含义,前一个dp[i][j]中的j表示总的存放物体的容量,后一个dp[i][j]中的j表示剩余可以存放的容量,其实本质上还是同一个含义。给定一定的容量,存放...原创 2018-11-09 13:36:56 · 179 阅读 · 0 评论 -
51nod 1106 质数检测
题目源码附上:#include <iostream>#include <math.h>using namespace std;long long S[1001];int main(){ int n; cin>>n; int i,j; for(i=0;i<n;i++) { cin>>S[i]; if(S[i...原创 2018-11-06 14:08:36 · 100 阅读 · 1 评论 -
51nod 1118 机器人走方格
题目解题思路:计算到第i行第j列方格的通路数=到第i行第j-1列的通路数+到第i-1行第j列的通路数。对于第一行和第一列的格子,只有一条通路数。刚开始过了一半的数据,解决方案:每计算一个格子都要取模!源码附上:#include <iostream>using namespace std;long long A[1005][1005];const long l...原创 2018-11-06 13:52:48 · 181 阅读 · 0 评论 -
51nod 1079 中国剩余定理
题目解题思路:使用暴力算法可以过哎!K%a1=b1 (1);K的取值是在b的基础上不断累加a1;K%a2=b2 (2);K的取值是在b的基础上累加a2.要求出满足(1)式和(2)式的K,对每个满足(1)式的K判断是否也满足(2)式,如果不满足,则加a1,直到满足(2)式为止。若引入K%a3=b3 (3),则在上面所得...原创 2018-11-01 22:13:53 · 99 阅读 · 0 评论 -
51nod 1183 编辑距离
解题思路:本题做法与求最长子序列长度有点类似,设dp[i][j]表示在字符串s1的前i个字符和字符串s2的前j个字符最少需要修改的字符个数。1.若s1[i]=s2[j],则dp[i][j]=dp[i-1][j-1];2.若s1[i]!=s2[j],则dp[i][j]=(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]中的最小值)+1;源码附上:#inc...原创 2018-10-30 20:01:08 · 119 阅读 · 0 评论 -
51nod 1181 质数中的质数(质数筛法)
原题参考了网上的大概缕清了思路,用自己的方法做一直都是编译错误,不是很懂,请求大佬指点。解题思路:首先建立prime[]数组,用于判断数组中的下标所对应的值是质数还是非质数。若为质数,则标记为0,否则标记为1。从2开始依次判断,若该数为质数,则计数变量加1,再判断该数所对应的编号是否也为质数,如果是质数并且该数大于等于N,则输出结果。最后对该质数的所有倍数都标记为1,表示它的倍数不可能...原创 2018-10-31 17:38:28 · 147 阅读 · 0 评论 -
51nod 1265 四点共面
解题思路:四个点表示成三个向量ab,ac,ad,将这三个向量表示成3*3的矩阵,其中第一行为ab.x,ab.y,ab.z,第二行为 ac.x,ac.y,ac.z;第三行为ad.x,ad.y,ad.z。三个向量共面的充要条件为行列式的值为0。源码附上:#include <iostream>using namespace std;struct point{ i...原创 2018-10-26 17:49:00 · 229 阅读 · 0 评论 -
51nod 1174 RMQ算法
题目此题用暴力就可以水过......终于找到了一道增强自信心的题,应付一下校程序大赛。线段树原理源码附上#include <iostream>using namespace std;const long long MAXN=1e+9;long long S[MAXN];int main(){ int N,i,j; cin>>N; fo...原创 2018-11-02 19:43:24 · 128 阅读 · 0 评论 -
51nod 1137 矩阵乘法
题目so easy的一道题,练手感。#include <iostream>using namespace std;const int MAXN=1002;int A[MAXN][MAXN],B[MAXN][MAXN],C[MAXN][MAXN];int main(){ int N; cin>>N; int i,j,k; for(i=0;i<...原创 2018-11-04 19:39:13 · 117 阅读 · 0 评论 -
51nod 1088 最长回文子串
题目解题思路:用暴力的方式,定义两个标记i,j,i从字符串的左边开始往右指,j从字符串的右边开始往左指。取中间的字符串存储到另一个字符数组中,每存储完一个字符串,则进行回文字符串的判断。回文字符串的判断如下:从字符串的开头遍历到字符串的一半,判断前半部分和后半部分的字符是否相同,若相同,则为回文字符串。将每个回文字符串的长度记录下来。最后得到最大回文字符串的长度。源码附上:...原创 2018-11-10 21:55:28 · 153 阅读 · 0 评论 -
51nod 1091 线段的重叠
题目做这道题的主要目的是熟悉一下vector容器的使用。这里使用容器的效果和使用数组的效果是一样的。新建一个容器,在容器中存放struct类型的数据,排序用sort(v.begin(),v.end(),lessCompare);解题思路:首先对所有线段按照左端点升序,若左端点相同,按右断点降序比较bool lessCompare(const node& a,const...原创 2018-11-20 09:50:49 · 121 阅读 · 0 评论 -
51nod 1283 最小周长
题目在算法题中,有很多像这种对于多元方程,求一个最优解的问题。最容易想到的方法就是暴力,对每一个变量都进行相应取值范围内的遍历。通常这种解法都不会过。解决方法:1.根据已知条件是否可以缩小变量的约束范围。2.n元变量,根据等式,减少到n-1,n-2。。。个变量(这样可以减少循环次数)源码附上:#include <iostream>#include <...原创 2018-11-18 11:45:17 · 119 阅读 · 0 评论 -
51nod 1284 2 3 5 7的倍数
题目解题思路:使用容斥原理;1.求出所有1~N中所有为2的倍数,3的倍数,5的倍数,7的倍数的个数,在求得的结果中肯定有些是重复的;2.要减去第一步中重复的哪些数字。如何求重复的那些数字呢?求两两的最小公倍数。例如:1~N中满足2的倍数的个数有N/2个,满足3的倍数的个数有N/3个,既满足2的倍数有满足3的倍数的个数为N/6个,则1~N中是2,3的倍数的个数为N/2+N/3...原创 2018-11-18 11:30:35 · 175 阅读 · 0 评论 -
51node 1289 大鱼吃小鱼
题目尝试了好久总算调通了。解题思路:本题使用迭代器vector解决。如果是第一条鱼,则直接push_back(),从第二条鱼开始判断。只有当vector容器中的最后一条鱼方向向右,要进容器的鱼游动方向向左时,才会有大鱼吃小鱼的情况。1.判断容器中的最后一条鱼a游动方向为1,新进来的鱼b游动方向为0;2.满足条件1后,比较a,b的大小,若b大于a,则pop_back()弹出鱼a(...原创 2018-11-18 11:15:50 · 270 阅读 · 0 评论 -
51nod 1381 硬币游戏
题目解题思路:硬币与直线相交的条数分为两种情况(半径为整数且大于0的情况下):1.相切:2*r+1;2.相交:2*r由于相交的情况有无数种,相切的情况只有一种,所以与与直线相交条数的期望为2*r。源码附上:#include <cstdio>#include <cstring>#include <algorithm>using ...原创 2018-11-17 19:52:00 · 164 阅读 · 0 评论 -
51nod 1046 A^BModC
题目解题思路:由于效率问题,每做一次乘机求一次余数会不过。可以将底数成倍增长求余数。源码附上:#include <iostream>using namespace std;int main(){ long long A,B,C; cin>>A>>B>>C; A%=C; long long ans=1; while(B&...原创 2018-11-12 08:42:49 · 219 阅读 · 0 评论 -
51nod 1049 最大子段和
题目看起来简单的逻辑,有着神奇的结果。解题思路:本题要求最大字段和,首先设定一个初始max=0;从第一个数字开始进行累加,每累加一次都有三种情况:1、累加后的值比原先大了,则要跟新原来的max;2、累加后的值比原来小了但比零大,则不跟新原来的max;3、累加后的值比原来小了并且小于零,则不跟新原来的max,且累加求和的值要置为0;源码附上:#include <i...原创 2018-11-13 19:09:16 · 104 阅读 · 0 评论 -
51nod 1134 最长递增子序列
题目解题思路:学习了lower_bound()函数,该函数的作用:把一个数放于一个序列中最早插入的哪个位置i,前i-1个数逗比该数大。具体请看https://blog.csdn.net/tjpuacm/article/details/26389441。用该函数,就能找到一个序列中排列最紧密的一组数,也就是数字之间相隔最近(前提:数字的相对位置不变),这样就可以计算出最长子序列啦!...原创 2018-11-05 20:28:49 · 110 阅读 · 0 评论 -
51nod 1007 正整数分组
解题思路:这是一个0-1背包问题。对于每个数字,放或者不放入背包,最后使得背包中的数字之和最接近且小于所有数字总和的一半。源码附上:#include <iostream>#include <algorithm>using namespace std;int A[101],dp[101][10001];//dp[i][j]表示考虑第i个数字是否放入背...原创 2018-10-21 10:13:27 · 140 阅读 · 0 评论 -
51nod 1031 骨牌覆盖
解题思路:这是一道递推题,对于这类题,最好的方法是将N从1开始对每种情况在草稿纸上画一画,会找到规律。对于本道题的规律是:对于2*N的骨牌排列总数分为两种情况,一种是在2*(N-2)的情况下添加两个横放的骨牌,另一种是在2*(N-1)的情况下添加一个一个骨牌即可。综上所述,2*N的情况总数为2*(N-2)情况下的总数+2*(N-1)情况的总数。如果设2*N的排列总数为f[N],那么...原创 2018-10-21 09:14:28 · 196 阅读 · 0 评论 -
51nod 1413 权势二进制
解题要点:找到输入数中各个位中的最大值即可。例如:1234=1111+111+11+1;(计算4次)4321=1111+1110+1100+1000;(计算4次)#include <iostream>using namespace std;int main(){ long long n; cin>>n; int max=0; whi...原创 2018-10-07 14:51:05 · 172 阅读 · 0 评论 -
51nod 1433 0和5
解题关键点能被9整除的数满足条件:各位数字相加和为9#include <iostream>#include <algorithm>using namespace std;int a[1001];int main(){ int n,i,result=0,sum=0,num5=0,num0=0; cin>>n; for(i=0;i&l...原创 2018-10-07 14:26:38 · 121 阅读 · 0 评论 -
51nod 1062 序列中的最大的数
解题思路:直接根据题意求,每求出一个数,就去算当前为止最大的那个数。很easy的一道题,当时给自己增加信心。源码附上:#include <iostream>#include <algorithm>using namespace std;long long A[100001];long long MAX[100001];void init(){...原创 2018-10-17 21:18:10 · 158 阅读 · 0 评论 -
51nod 1133 不重叠线段
解题思路:本题使用贪心算法,对线段的末端进行贪心。step1:对线段末端进行升序排列,末端相同,对始端进行升序排列。step 2(核心):贪心。例如线段序列为:start:2 1 3 5 6end :3 5 6 8 10从第一段线段开始遍历,若当前线段的末端大于下一段线段的始端,则将下一线段的末端置为当前线段的末端。理由:若下一线段存在相不重合的线段,必定也与当前线...原创 2018-10-13 10:39:29 · 267 阅读 · 0 评论 -
51nod 1138 连续整数的和
解题思路:一道数学题。、step 1:N可以有n个连续的整数相加,则可以写成以下序列:a,a+1,a+2,..,a+n-1对以上序列求和得到:(a+a+n-1)*n/2=N;求得a=(2*N+n*(1-n))/(2*n);step 2:考虑n的取值范围,根据题意得:n的最大值(也就是最多有几个连续的自然数相加)是从1开始加(1+2+...+n),(1+n)*n/...原创 2018-10-13 09:45:31 · 190 阅读 · 0 评论 -
51nod 1629 B君的圆锥
公式推导:圆锥表面积计算公式:S=πrl+πr²;圆锥体积:V=1/3πr²h令a=r²;根据最小抛物线最高点的公式得到 #include <iostream>#include <math.h>#include <algorithm>using namespace std;#define PI 3.1415926...原创 2018-10-06 11:04:22 · 351 阅读 · 0 评论 -
51nod 1596搬货物
题目描述如下:此题考查二进制计算,货物质量为,货物质量相加为2的幂次才可以搬运,由此想到二进制运算,例如当wi分别为1,1时,则可以搬运(because 1+1=10);wi分别为2,2时,可以搬运(10+10=100),100+100=1000,1+1+10+100+1000+10000=100000,诸如此类。下面附上源码:#include<stdio.h> ...原创 2018-10-05 10:51:08 · 166 阅读 · 0 评论 -
51nod 1067 Bash游戏V2
解题思路:列表找规律:石子个数(N) 获胜 1 A 2 B 3 A 4 A 5 A 6 A 7 B 8 A 9 A B获胜的情况2,7,9,14......(+2+5+2......)可以用一个式子表示:N%7=0或2时,则B获胜,其他情况A获胜。源码附上:...原创 2018-10-18 08:56:44 · 176 阅读 · 0 评论 -
51nod 1428活动安排问题
解题思路:将每个活动根据结束时间进行升序排列,若结束时间相等,则按开始时间升序排列。后面进行两次嵌套循环,将每个的结束时间与其排在它后面的活动的开始时间进行比较,首先max初始化为1,若活动开始时间大于活动的结束时间,则result进行加1操作,最后选取,在每次的外层循环中,输出max最大的值。源码附上:#include <iostream>#include <...原创 2018-10-08 23:31:33 · 189 阅读 · 0 评论 -
51nod 1417天堂里的游戏
解题思路:美女给出一个出正面的概率,不论Noder采用什么方案,最后所得期望还是相同的,所以根据题意,可以列出如下式子:Noder出全正的期望:Ap-(1-p)(A+B)/2;全反的期望:B(1-p)-p(A+B)/2;两者期望相等,最后得出:p=(A+3B)/(4A+4B);求分子和分母的最大公约数,消除分子分母的公因子,得到结果。源码附上:#...原创 2018-10-09 09:16:01 · 247 阅读 · 0 评论 -
51nod 1264 线段相交
解题思路:已知直线p1p2,q1q2,只要判断出p1,p2分布在直线q1q2两侧并且q1,q2在直线q1q2两侧,就能证明直线p1p2和q1q2相交。如何证明p1,p2分布在直线q1q2两侧呢?使用向量叉积运算:已知向量q1q2,q1p1,q1p2。q1q2与q1p1叉积的符号与q1q2与q1p2叉积的符号的符号相反即可。在计算叉积的时候就想是在计算行列式,线代忘的差不多了。具...原创 2018-10-28 11:29:49 · 114 阅读 · 0 评论 -
51nod 1014 X^2 Mod P
解题思路:本题其实枚举就能过,本人用了开平方根,也过了。源码附上:#include <iostream>#include <math.h>using namespace std;int main(){ long long P,A; cin>>P>>A; long long i; int flag=0; for...原创 2018-10-22 19:14:40 · 144 阅读 · 0 评论 -
51nod 1024 矩阵中不重复的元素
解题思路:以后凡是碰到指数问题,都要想到用对数求解。这里用到了C++中set,之前没学过容器,今天看了一波,感觉很好用。这是与容器相关的基本操作https://www.cnblogs.com/omelet/p/6627667.html由于精度问题,这里的对数只能取log2,用log10和log都会报错。源码附上:#include <iostream>...原创 2018-10-22 18:57:07 · 153 阅读 · 0 评论 -
51nod 1279扔盘子
解题关键思路:盘子从井上落下,对于井,可以作如下处理:若它的下一层宽度大于上一层宽度,则将下一层宽度设置为上一层宽度,若下一层的宽度小于上一层的宽度,则下一层宽度保持不变。#include <iostream>using namespace std;typedef long long LL;LL W[50001],D[50001];const int INF ...原创 2018-10-10 21:19:16 · 126 阅读 · 0 评论 -
51nod 1094 循环数组最大子段和
解题思路:本问题跟之前和为k的连续区间解题算法稍有不同:1.该题连续区间的范围是循环序列;2.如果仍然使用上述算法会超时。解题方法:对于循环序列,需要考虑两种情况:1.不考虑循环序列的情况下求出连续序列的最大值2.若是最大值的产生情况是一部分取头+一部分取尾。则只需求出中间部分连续序列和为负数的最小值对于第2种情况,可以把问题转化为求在对序列取反的情况下求中间部...原创 2018-10-19 20:16:03 · 147 阅读 · 0 评论 -
51nod 1092 回文字符串
解题思路:1.求原字符串s1逆置后的字符串s2; 2.求s1和s2的求最大公共序列长度(可以是离散的)。例如:abbcd逆序后为dcbba,他们的公共子序列长度为2; 3.原字符串长度-公共子序列长度即为添加的最少字符数。源码附上:#include <iostream>#include ...原创 2018-10-16 09:25:36 · 88 阅读 · 0 评论 -
51nod 1094 和为k的连续区间
最近学习图像处理,在画累计直方图的算法中,要统计小于等于灰度值i的像素个数。此题思路与该算法十分类似,统计前i项的和与前j项和,两者相减即为一段连续区间的累加求和结果。其实不用map映射即可得出结果。源码附上:#include <iostream>using namespace std;int A[10001];int sum[10001];int main...原创 2018-10-15 22:42:11 · 198 阅读 · 0 评论 -
51nod 1095 Anigram
解题思路:现将字典中的所有字符串存到mp1中,计算对应单词出现的次数,对每个字符串根据组成字母,从大到小排序整合存储到mp2中,计算对应单词出现的次数,最后输入测试字符串,num1变量记录在字典中与该字符串相同字符串出现次数(目的,相同单词不算Anigram),num2变量记录对该字符串进行排序后在mp2中出现的次数,最后两者相减即为Anigram的个数。源码附上:#in...原创 2018-10-15 21:18:53 · 155 阅读 · 0 评论 -
51nod 1266 蚂蚁
解题思路:本题在样例中已经提示了思路(左、右、右)(右、右、右)。最短时间应为所有蚂蚁到距离自己最近端点的时间中的最大值;最长时间应为所有蚂蚁到距离自己最远端点的时间中的最大值;#include <iostream>using namespace std;int A[50001];int main(){ int N,L; cin>>N&g...原创 2018-10-11 14:00:49 · 118 阅读 · 0 评论