自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 vimrc配置

set nocompatible              " be iMproved, required filetype off                  " required " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#be...

2018-07-24 16:38:53 452

转载 Ubuntu 18.04: How to install OpenCV

https://www.pyimagesearch.com/2018/05/28/ubuntu-18-04-how-to-install-opencv/

2018-07-24 11:10:17 844

原创 POJ3069

/* 还是贪心问题,对于当前要解决的点a[i],为了尽可能的少标记点,因此应该标记比a[i]+R小的最大a[j], 因此排序后进行二分查找,得到j,那么a[j]+R之内的元素也都满足条件了, 下一个目标是a[i]>a[j]+R最小的i */ #include #include #include using namespace std; const int maxn=1000+5

2017-07-20 11:14:21 391

原创 POJ3617

/*典型的贪心算法的题目 贪心策略很简单,就是每次选择首尾较小的字符, 当首尾字符一样时,依次向中间比较,选择较小字符先出现的一端。 需要注意的是输出结果是,每80个字符需要输出一次换行*/ #include #include #include using namespace std; const int maxn=2000+5; char ch[maxn],ans[maxn]

2017-07-20 10:49:44 394

原创 UVa1152

/*经典的四数和问题,通过空间换时间的方法,开辟两个数组lhs和rhs,分别遍历a和b的和,c和d的和然后把lhs和rhs排序,遍历lhs在rhs中进行二分查找,总的时间复杂度是O(n*n*log(n))*/#include #include#include#include#includeusing namespace std;const int maxn=4005,maxnn=maxn*maxn

2017-07-13 13:28:18 305

原创 UVa1343

/* 这道题还是使用迭代加深搜索的方法,其中有很多技巧学习。 1.在描述棋盘的时候使用m[24]来记录从上到下,从左到右每个位置上的数字。 2.为了方便接下来的移动操作,使用常数数组line[8][7]来记录每条线上的棋子在m中的坐标。 3.使用rev数组来记录反向移动,这也就解释了为什么line需要记录返现操作,这样就都变成了正向操作。 4.剪枝操作h(),因为每一次移动最多移除一个数

2017-07-12 15:13:51 531

原创 Uva12325

/* 这道题是使用枚举的方法做,不能计算性价比(价值/体积),先安排尽量多的性价比高的物品。因为,本题只能一次放整个物品,不能讲物品切割,放进去一部分,比如,宝箱体积100,物品1,体积80,价值80,物品2,体积25,价值24 显然是物品1性价比更高,但是物品1只能放进去一个,物品2可以放进去4个,价值更多,因此还是使用枚举的放法。 这道题一个trick就是当s1和s2都很小的时候,首先计

2017-07-12 09:56:10 436

原创 UVa11212

/* 迭代加深搜索经典问题, 迭代加深搜索的核心思想是通过不停加深搜索深度来控制解答树的深度和宽度, 对于这一类题目,如果使用DFS,则会因为第一个可行解的深度太大而导致爆栈, 因此搜索的对象是深度,通过控制深度,及时停止过深的搜索。 2.也是搜索问题的共性,就是要有剪枝, 寻找剪枝的方向是根据当前状态和剩下的可行步来计算最好情况下能否获得可行解,如果不行,那么就需要剪枝 3.这中间

2017-07-12 08:49:13 607

原创 UVa140

/* 因为最多有8个点,因此暴力搜索即可,最多时间复杂度8! 1.按照提议处理数据,首先是读取字符串,处理边关系e[i][j]和标记使用的节点v[i] 2.对于每一种排列,计算每个元素的位置pos[i],方便后面计算每个节点的带宽bd[i] 3.更新结果带宽和对应的排序。 */#include #include #include #include #include #incl

2017-07-05 15:20:57 301

原创 UVa129

/* 还是回溯法,但是这道题和之前题目不一样的地方是,这道题只要找到答案就会返回,而之前的题目都是遍历寻找所有可行解。 因此这道题需要设定返回值,当找到答案时,及时结束程序。 */ #include #include #include #include #include #include #include using namespace std; int n,L;

2017-07-05 13:40:53 255

原创 UVa524

/* 还是回溯法,关键是编写DFS函数 DFS函数是递归函数,因此第一步是递归终止条件,即已经搜索到底部,判断是否满足条件,决定是否输出。 第二步是递归,当进入第二步时,首先是改变标记状态,然后继续调用DFS,最后恢复标记状态。 */ #include #include #include #include #include #include #include using

2017-07-05 11:01:47 238

原创 八皇后

/* 八皇后问题是典型的回溯法的使用 在使用回溯法的时候,最主要的问题是标记已经使用的方案,然后向下搜索,结束搜索以后,取消标记 */ #include #include #include #include #include #include #include using namespace std; int kase=0;//方便打印时候提示第几种解法 int m

2017-07-05 09:11:26 318

原创 UVa725

/* 本题是使用暴力搜索的方法解决的,关键是分析问题的特点 针对除数b进行暴力搜索,其搜索范围是(1000,100000) 被除数a=b*n,然后判断a和b是不是把0-9的数字全使用了,而且只使用一次 这中间有一个问题,就是0可以没用过,然后在b的前面补0即可。 */ #include #include #include using namespace std; bool

2017-07-04 13:27:29 333

原创 UVa572

/* 本题是典型的DFS思路,即在读取当前位置为@时,即刻进行DFS,扫描周围八个方向的位置是否为@ */ #include #include #include #include #include #include #include using namespace std; const int maxn=100+5; char ch[maxn][maxn]; int

2017-07-02 10:07:53 552

原创 Uva699

/* 这道题和UVa839很像,很容易想到是用DFS,其实二叉树的先序遍历就是一种DFS 考虑到如果起始位置设为0的话,位置有正有负,需要用字典记录对应位置的值, 如果起始位置设为大数组中间位置就没有这样的问题,这是第一个技巧 其次,在确定了DFS思路以后,很容易想到在DFS函数内部读取一个数字处理一个数字, 但是这样有一个问题,就是无法判断读取是否结束,就是在读取单个-1的时候,这时候

2017-07-02 09:47:53 651

原创 UVa839

/* 本题是典型的动态规划问题,对于动态规划问题,每次只需要考虑当前问题的划分, 也就是把当前问题划分成子问题和在当前问题和子问题之前问题的解决,而不需要去考虑子问题怎么解决。 比如这道题就是把当前问题划分成左右两个节点输入的问题,然后判断当前节点是否是平衡状态即可 不需要去考虑左右两个节点怎么平衡的问题,子问题是递归解决的。 */ #include #include #incl

2017-07-01 18:27:00 347

原创 UVa122

/* 题意很容易理解,就是给出一组描述二叉树节点的数据,然后判断二叉树是不是完整的,有两种情况是不完整的: 第一种是,当在同一个节点两次插入不同的数值时候,判断为二叉树是不完整的。 第二种是,当二叉树的节点没有父节点的时候,判断二叉树是不完整的。 然后是描述二叉树节点的形式(num,s),其中num是节点的值,而s是描述从根节点怎么到当前节点,s是字符串,只有L和R构成。 代码中的辅助函

2017-06-29 15:16:24 413

原创 UVa679

/* 题意很容易理解,关键是分析每个小球下落的特征,也就是对于编号为I的小球是向左走还是向右走的问题。 首先是分析给定的样例,理解题意,然后是分析1,2,3,4,5,6,7,8,。。。的下落选择,发现: 对于Depth=i的节点,设k=1k/2,那么小球往右走,否则往左走。 然后根据完全二叉树的编号特点,left=root*2,right=root*2+1,因此就能准确计算出小球最后的落点

2017-06-29 14:29:56 273

原创 MYSQl不能插入中文的解决办法

1.临时的解决方案,即修改当前表的属性 show full COLUMNs from tablename; 显示如下内容表示,当前列的编码不是utf8 对每一列依次使用如下命令 alter table tablename change columnname columnname varchar(256) character set utf8 collate utf8_unico

2017-06-27 16:00:00 739

原创 Ubuntu16.04 中科大源

deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.ustc.e

2017-06-27 09:25:57 6463

原创 UVa11988

/* 关键是理解home和end的作用,home是在最前面插入字符,end是在最后输入字符。 因此设置两个string,beg和end分别是在前面插入字符串和在最后插入字符串 home表示在在最前面插入还是在最后插入。 */ #include #include #include #include #include #include #include #include #i

2017-06-22 17:12:47 377

原创 UVa442

/* 典型的表达式解析题目 解析表达式一般是使用栈实现的 */ #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main(){ char s[5];

2017-06-22 15:25:32 409

原创 UVa514

#include #include #include #include #include #include #include #include #include #include #include using namespace std; int main(){ int N,b[1005]; while(scanf("%d",&N)!=EOF&&N

2017-06-22 14:52:06 213

原创 UVa230

/* 题意很容易理解,用set来记录在架图书和归还的图书,这样顺序是按照题目要求的。 然后使用字典b2a记录图书的作者。 */ #include #include #include #include #include #include #include #include #include #include using namespace std; int mai

2017-06-22 10:21:48 469

原创 UVa12100

/* 关键是理解题意,如果当前取出的任务不是优先级最高的,那么就把该任务放在队列最后 注意,此时是不会打印优先级最高的任务,也不会消耗时间 */ #include #include #include #include #include #include #include #include #include using namespace std; int main()

2017-06-21 16:55:28 547 1

原创 UVa10391

/* 题意很容易理解,输入是字典序的一些单词,要求找到其中哪些单词是由字典中两个单词拼接起来的。 解题思路很简单,如果单词c是由单词a+b组成,那么a肯定是c的前缀, 也就是在字典序中,c是排在a后面,也就是说,能由a作为前缀的字符串都是紧排在a后面的。 刚开始一次WA的原因是输出有重复,因此后来改用set来记录结果,避免重复。 给一组网上的测试数据 aabcabcdebcdede如果

2017-06-21 11:12:13 452

原创 UVa10763

/* 按照题意的理解,满足条件,需要a->b和b->a学生数量一样, 因此设计map,int>dic来记录a->b学生数量,如果有b->a的,那么就a->b数量减1, 最后字典中每个元素的value都是0的时候,即可满足交换条件,否则不满足。 本题学习的地方是如何构造满足自己需要的hash函数,进而设计自定义的unordered_map */ #include #include

2017-06-20 16:32:20 1808

原创 UVa10935

/* 根据题意,很容易理解,因为是第一张扔掉,第二张放在最后,所以相当于是在扔牌的时候每次前进两步,每一步都是没有被扔过的牌 */ #include #include #include #include #include using namespace std; int main() { int n,a[55],pos,cnt; while(sc

2017-06-20 15:40:44 680

原创 1594

/* 本题本质上时在判断是否存在环的问题 对于判断是否存在环的问题,最基本的方法就是设置两个变量,一个走一步,一个走两步,如果存在环,那么两个变量肯定会相遇 */ #include #include #include #include #include #include using namespace std; void next(vectorint>&num

2017-06-20 15:06:48 265

原创 UVa1593

/* 这道题最大的经验就是,不要使用没有定义的变量,也就是不要使用没有初始化的变量 例如本题中在声明完len数组之后一定要调用memset把len数组初始化为0 解题思路很简单,就是对于每行的输入,首先按照空格键进行拆分,记录每一列对应字符串的最大长度len[i] 然后格式化输出,长度不够的要补齐 */ #include #include #include #include

2017-06-19 11:04:08 341

原创 UVa400

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; c

2017-06-17 19:41:54 215

原创 UVa540

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int nmax=1000+1

2017-06-16 17:26:12 179

原创 UVa156

/* 对于每一个输入的字符串s做归一化得到字符串no 作为键值对构建字典,如果当前字符串s归一化之后的no已经出现过,那么就把dic[no]赋值为空字符串 然后把dic中所有值不为空的值都放在strs中,排序输出即可 */ #include #include #include #include #include #include #include #in

2017-06-16 16:30:15 201

原创 UVa1590

/* 这道题的思路很简单就是,就是先把ip地址转成二进制, 然后比较二进制的共同前缀, 最后根据共同前缀计算子网掩码即可 本质上的功能就是把十进制的string和二进制的string的相互转换 */ #include #include #include #include #include #include #include #include #include

2017-06-16 14:16:44 585

原创 UVa201

/* 本题按照题意,设置两个二维数组,分别记录水平连接和垂直连接即可。 最坑的地方在于垂直连接时候,是先输入列,再输入行,这点注意。 */ #include #include #include #include #include #include #include #include #include using namespace std; //#define

2017-06-15 16:14:23 586

原创 UVa1589

/* 题意很简单,就是黑方只剩下一个将,红方还有很多子,而且当前的残局是红方正在将军,判断红方是否已经将死黑方 红方只有四种棋子,帅,车,炮,马,因此按照每个棋子的运算规则,即可判断出红方已经能吃到的位置 1。给棋子编码,炮是1,马是2,车是3,因为在对将的时候帅的作用和车是一样的,因此把帅也编成3号,按照车处理 2.这中间使用两个棋盘来记录,mp是残局时每个棋子的位置,an记录判断后红方

2017-06-15 14:46:08 946

原创 UVa213

/*本题学习的主要是对标准输入输出的处理 在在处理字符的时候可以一个一个的处理,即读取字符的时候一个一个处理,输出字符的时候也可以处理一个输出一个 在处理和标准输入输出时,需要注意的是'\n','\r'和EOF三个字符的处理,尤其是使用getchar()的时候。 另外的一个技巧是在while循环的时候,循环代码有一句必然执行,然后根据执行的结果判断是否继续执行剩下的循环代码 这时候可以在w

2017-06-14 16:11:09 633

原创 UVa489

/* 本题使用cnt数组记录s中每个字母出现的次数, m和n分别表示s和g的长度 e表示猜错的次数 */ #include #include #include #include #include #include #include #include #include using namespace std; //int cmp(const void *a,co

2017-06-13 21:19:25 419

原创 UVa1339

/* 这道题最大的教训就是要注意结果大小写问题 刚开始一直输出Yes和No,而要求的是YES和NO */ #include #include #include #include #include #include #include #include #include using namespace std; int cmp(const void *a,const

2017-06-13 20:33:06 195

原创 UVa1587

/* 这道题主要是练习一下结构体的使用,包括初始化和运算符重载 解题思路很简单,根据长方体六个面的结构特点,先把他们的长宽对进行排序 那么0和1,2和3,4和5都应该是相等的 然后判断他们的长度关系,0和2的宽应该是相等的,0和2的高分别是4的宽和高 */ #include #include #include #include #include #include #

2017-06-12 17:21:37 925

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除