
算法笔记
wildg00se
这个作者很懒,什么都没留下…
展开
-
c++十进制转换二进制
学会了一个很强的操作,自己手动将十进制数字转换成为二进制#include <bits/stdc++.h>using namespace std;vector<int>pow2={1,2,4,8,16,32,64,128};int main(int argc, char** argv) { int a = 17; string s; for(int i =7;...原创 2019-12-03 17:55:04 · 1549 阅读 · 0 评论 -
洛谷 P1162 填涂颜色 题解
刚看到这道题的时候无从下手,不理解题意到底在考察什么,看了dalao的一片题解后才明白,原来是求解联通块的问题…(所谓联通块在这道题里面可以理解为数字相同的块) 所以本题的题意就相当于如果一个联通块其中有块在边界时,那么这个联通块一定不在闭合曲线里面了,而先找联通块再去判断这种方法比较麻烦,所以我们利用逆向思维,先找到边界上的块,再找到他的联通块,这样找到的整个联通块就一定不在闭合曲线里面了,注...原创 2019-11-28 18:13:58 · 417 阅读 · 0 评论 -
洛谷 P1101 单词方阵 题解
这个题的思路类似走迷宫,都是在循环每个方向,看最终能不能找到解自己写的答案很乱,看了洛谷一篇dalao的题解豁然开朗这个题解的优秀之处在于 他不是盲目的寻找方向 而是先大概找到一个方向,再在这个方向上继续搜索,大大提高了效率#include <bits/stdc++.h>#define max_int 120using namespace std;//用一个二维数组保存方...原创 2019-11-27 20:15:55 · 319 阅读 · 0 评论 -
洛谷 P1019 单词接龙 题解
这道题我自己做的时候用的是以字符串为参数进行dfs,但是搞错了看了dalao的题解后发现,原来不用真的去进行字符串拼接,定义一个数组保存单词之间的重叠数目就好了,然后用dfs穷举出所有的"龙",看最长的"龙"是多长 这里一定要弄清楚字符串的下标 否则会出很多莫名其妙的错误#include <bits/stdc++.h>#define max_int 30using name...原创 2019-11-27 17:49:24 · 229 阅读 · 0 评论 -
csp 201809-2 买菜 使用桶
看了其他大佬们的答案很多是用的求重叠区间的方法,一开始我也想用这个方法但是奈何我太菜了没写明白…转念一想这种题可以好像可以用桶(因为和数组下标有关),用桶可以模拟出两个坐标轴,于是用桶简单粗暴地ac了(并没有,前两次因为没有注意ai bi ci di的取值只得了50分…)下面说一下我的思路**其实原理就是用桶模拟出两个人的时间轴,让[ai,bi)这段数组的值为1(注意这个区间是左闭右开,这...原创 2019-11-24 22:06:25 · 177 阅读 · 0 评论 -
题解 P1803 【凌乱的yyy / 线段覆盖】
这一类题都属于线段覆盖的题,解题思路的核心基本一致:将整体时间看作一条数轴,那么每场比赛就相当于数轴上的一条线段,每场比赛的开始和结束时间都相当于数轴上的两个端点,我们的目的就是在这条数轴上放入尽可能多的线段.在这里就用到了贪心法:将右端点小的线段优先放入,这样就可以放入尽可能多的线断了代码:#include <bits/stdc++.h>using namespace std...原创 2019-11-23 21:18:28 · 215 阅读 · 0 评论 -
P1538 迎春舞会之数字舞蹈 题解
这道题非常有意思,根据输入的字母打印出响应的图形看题解使用的是将打印出来的图形分成5部分,每一个数字的每一个部分对应一个编码先将每个数字对应的编码整理成一张表,然后根据这张表进行打印就好了代码如下:#include<bits/stdc++.h>using namespace std;//将每个打印出来的数字分成5部分 每部分有0,1,2,3四个编码,分别代表在不同位置打印...原创 2019-11-22 10:41:04 · 263 阅读 · 0 评论 -
P1071 潜伏者 题解
这是我自己第一次独立完成字符串的题(其实也并没有,我刚开始的想法是逐个读入字符然后挨个存储,后来因为不会逐个读入字符串里面的字符而放弃了 菜哭…)但是我的思路还是可以ac掉这道题的这道题我使用了打表和桶的思路桶:将密码的每一个字符串转换成ascii码,作为数组下标,并以这个下标存入这个字母对应的原密码,这样就建立起了密码和原密码一一对应的关系,当出现同一个原密码对应了两个密码时候,直接输出...原创 2019-11-20 21:48:38 · 350 阅读 · 0 评论 -
洛谷 P1603 斯诺登的密码 题解
很有意思的一道题,考点是字符串处理,自己没做出来…按照题解上使用了打表和贪心算法的思路解出来了基本思路是:先把每个给出的英文单词以及所对应的数字分别存入到数组中,然后一个一个把单词读进啦,每读一个就判断是否在数组中(这里字符串的对比必须要使用strcmp函数,千万不要使用==,否则会很惨…),如果在,将对应的数字存入到一个数组中去,将所有的单词都读完之后,对这个保存数字的数组进行排序,让最小的...原创 2019-11-19 21:27:48 · 409 阅读 · 0 评论 -
P1068 分数线划定题解
这道题其实不难,之前用桶排序写的程序很麻烦最终只得到了80分,不知道错在哪里…看题解大佬用的结构体感觉非常妙思路很简单,定义一个学生的结构体,利用这个保存学生的学号和成绩,并重载cmp方法,以便调用sort函数这道题给我的启发就是:当涉及到多个元素的排序时(如一个学生有学号.成绩 一个商品有价格,尺码),这时使用结构体并用sort函数进行排序是非常方便的贴上代码:``#include...原创 2019-11-19 08:28:07 · 226 阅读 · 0 评论 -
快速排序
今天这个快速排序折磨了我一天…看了很多的快速算法的程序以及改良写法还是没弄明白快速排序的本质所以来写篇文章把逻辑好好梳理一下首先,我们要知道快速排序算法的原理就是找到一个边界(学名枢轴),让这个边界左边的所有数字都小于它,右边的所有数字都大于它,然后递归地调用自身,将边界左边和右边的数组都进行快排函数定义:void quickSort(int a[],int left,int righ...原创 2019-11-18 19:45:39 · 144 阅读 · 0 评论 -
洛谷 P1031 均分纸牌
这个题解写的太好了…感觉我毕生都不会想到(哭#include <iostream> using namespace std; int main() { int a,p=0,js=0; cin >>a;int q[a]; for (int y=0;y<a;y++){cin >>q[y]; p+=q[y];} p/=a; for (i...原创 2019-11-12 21:37:47 · 165 阅读 · 0 评论 -
洛谷 P1056 排座椅
看这道题的题解说运用到了桶排序,但是感觉不是很正宗的那种桶排序,不过确实提供一一种找最大值数组下标的方法代码:#include<iostream>using namespace std;int h[1005],l[1005];//存放分开哪一行那一列 int th[1005],tl[1005];//桶排序 int M,N,K,L,D;int a,b,c,d,loca...原创 2019-11-12 10:31:54 · 182 阅读 · 0 评论 -
洛谷 P1056 排座椅
这道题本身没什么难度,用记忆化搜索就好了,但是看了一个题解感觉很有意思首先定义两个数组,一个数组a使用来判断输入的这个数字是否在内存中另一个数组b是存放这个数字用这两个数组的好处就是可以免去搜索的时间然后定义了两个指针,一个指向内存开头一个指向内存结尾,存入字母的时候结尾指针向后移动,当结尾指针大于内存的时候,前头的指针向也后移动#include <iostream>/...原创 2019-11-12 10:27:23 · 189 阅读 · 0 评论 -
洛谷P1579 哥德巴赫猜想(升级版)
这道题其实比较简单,主要就是注意2点1.如何求一个数是否为质数2.当遇到减法是一定要注意是否会出现负数,出现负数是否会影响到整个流程贴上自己写的代码:`#include <iostream>/* run this program using the console pauser or add your own getch, system("pause") or input ...原创 2019-11-10 17:40:52 · 219 阅读 · 0 评论 -
洛谷 P1307 数字反转
这道题不算太难,但是我自己做也没能全部ac(我真的是太太太太太太菜了)参考大佬的算法 #include<iostream> using namespace std; int main(){ int before; int after = 0; cin >> before; while(before){ after = after * 10...原创 2019-11-08 14:01:11 · 165 阅读 · 0 评论 -
洛谷P1022 计算器的改良
这道题的基本思路就是用常熟和除以系数和解一元一次方程,所以我们只需算出所有的常数和以及所有的系数和就ok了,我们定义一个变量temp临时存放数字,当这个数字后面直接是运算符号(+或-或=)时,直接将数字存入常数和中,如果后面有字母,我们就将该数字存放到系数和之中去贴下代码:#include<bits/stdc++.h>/* run this program using the ...原创 2019-11-08 12:22:49 · 203 阅读 · 0 评论