自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

NK_test的博客

大部分人愿意做任何事来逃避真正的思考

  • 博客(35)
  • 资源 (2)
  • 问答 (5)
  • 收藏
  • 关注

原创 leetcode Add Two Numbers(链表)

类似于大数加的操作,保存进位,注意处理长度可能不同的问题还有最后一个结点的进位问题。我们先辨析几个概念:链表头:数据内容为第一个元素的结点。头指针:指向头结点元素的指针。头结点:数据内容无效,其指针是头指针。一句话描述为:头指针是指向头结点的指针,头结点是指向链表头的结点。由这道题我们可以体会到头结点链表操作带来的便捷性。先是我写的代码,没有用头结点,最后如

2015-05-31 18:35:51 1190

原创 2015百度之星初赛(1)题解(1001)

1001:  简单的贪心题。首先我们特判必赢和必输的两种状态(maxm),然后对战斗力排序,找到在0~m之间最大的战斗力作为初始值,然后,每一次将攻击力提升至 下一个彪形大汉的值,同时k--,如果一旦发现打不过,那么必输,break。注意战斗力1e12,用__int64#include#include#include#include#includeusing namespace

2015-05-31 11:56:32 3071 2

原创 欧拉线性筛法求素数(顺便实现欧拉函数的求值)

我们先来看一下最经典的埃拉特斯特尼筛法。时间复杂度为O(n loglog n)int ans[MAXN];void Prime(int n){ int cnt=0; memset(prime,1,sizeof(prime)); prime[0]=prime[1]=0; for(int i=2;i<n;i++) { if(vis[i]) { ans[cnt++]=

2015-05-29 23:02:16 18945 4

原创 Leetcode Count Primes (欧拉线性筛法求素数)

欧拉筛法求素数的时间复杂度已经达到了O(n),是线性的很优秀的算法。有关具体算法的详解请参考我的这一篇博客。下面附上代码:class Solution {public: int countPrimes(int n) { int cnt=0; memset(vis,0,sizeof(vis)); for(int i=2;i<n;i++) { if(!vis

2015-05-29 22:54:19 4259

原创 Leetcode Longest Common Prefix (排序进行优化)

写完之后看到网上很多人的做法是暴力匹配,其实不用这样的。我们只要先将字符串排序,那么如果相邻的两个字符串一定前缀匹配度最高,那么我们只需要遍历一遍,每次比较当前字符串和它的前一个字符串的前缀,得出len,然后取所有len中的最小值即可。注意特判size为0和1的情况。时间8msclass Solution {public: string longestCommonPref

2015-05-28 16:48:35 1100

原创 [汇编] 汇编语言实现简易文本编辑器(光标移动、上卷和退格删除)

汇编实现的一个简易的文本编辑器,代码中有详细的注释。思路和细节:(1) 在屏幕中央初始化一片面积,并且定位光标,利用16号中断0号功能分别在ah,al中存储扫描码和ascii码,由此进行功能键的判断。(2) 实现对光标的操作,通过对dh,dl的变化和10号中断的2号功能进行光标的设置,上下左右分别改变dh,dl的值即可。(3)退格键的操作实现是 光标左移,然后利用21号中断输出空格

2015-05-27 12:54:34 5846

原创 2015百度之星资格赛题解

1001:可以看作找规律,其实是组合数学的一道题目。符合要求的对应关系是要么是自己和自己对应,要么是互相对应,即1->2则2->1。因为对于任何一个数如果他和自己本身对应,那么剩下还有n-1个数;如果他对应别的数(假定是a),那么a一定也和他对应,这样剩下还有n-2个数,并且他可以对应的数的选择有n-1种,所以,可得递推关系 f[i]=((i-1)*f[i-2]+f[i-1]);#

2015-05-25 23:52:38 1121

原创 LeetCode Reverse Integer (处理溢出)

这道题看上去比较简单,但是需要注意的细节和情况的处理还是很多的。(1) 注意负数(2)注意10,100这类数字的反转(3) 最容易忽视的一点,整型的溢出。(2333333339反转超int)注意我们计算的过程中不需要另外存数字,直接计算就好。处理溢出我们先用long long储存,超int后直接返回0其实我们发现,(1)和(2)都不需要特殊处理,在运算的过程中会自行处理。c

2015-05-25 23:25:13 1470

原创 poj 1330 Nearest Common Ancestors

最近公共祖先的经典问题。(1)dfs暴力标记查找(2)线段树(3)倍增算法(4)Tarian算法。这些我慢慢补充,自己也在学习这个算法。这道题数据量比较小,询问每组只有一个,所以我采用的是将其中一个数的祖先不断向上查找,并且做了vis标记。然后对于另一个进行的查找操作,当访问的节点正好是已经做了vis标记的,那么这个就是lca,输出即可。#include#incl

2015-05-24 19:13:08 851

原创 BestCoder #42题解(hdu 5232 & 5233 & 5234)

感觉这次的题目还是挺简单的。A :  如果两个人认识,那么就彼此各喝一杯酒,认识用1表示。另外主人肯定认识每一个人。数矩阵中的1加上人数n*2(主人的缘故)。#include#includeusing namespace std;int s[40][40];int main(){ int n; while(cin>>n) { int ans=0; ans+=n*2;

2015-05-24 18:47:35 1115

原创 hdu 1588 线段相交+并查集

判断第k个线段的集合中一共有几条线段。先用并查集将相交的线段合并记录,最后查询sum数组即可。#include#include#includeusing namespace std;struct node{ double x; double y;}s[2004];struct edge{ node a,b; int num;}E[2005];int fa[200

2015-05-23 00:30:43 901

原创 Leetcode Longest Substring Without Repeating Characters(最长不重复子串)

如题,求一个字符串中的最长不重复子串。采用O(n)的算法,hash[值]=index,设置一个指针指向字符串的首位,遍历,每当发现有重复的字母出现时,则指针指向最近的那个重复字符,记录更新长度。ans设为0,cur设为-1,有效解决空串和单字符的问题。class Solution {public: int lengthOfLongestSubstring(string s) {

2015-05-21 23:48:59 1098

原创 符号三角形的回溯算法(王晓东算法分析例题)

题目: 下面都是“-”。 下图是由14个“+”和14个“-”组成的符号三角形。2个同号下面都是“+”,2个异号下面都是“-”。 +   +   -   +   -   +   +   +   -   -   -   -   +     -   +   +   +   -       -   +   +   -         -   +   -           -   

2015-05-21 00:00:47 6828

原创 Leetcode Two Sum (数组)

题意: 从一个无序数组中找到两个数(一定存在)使其和等于target,返回两个数的下标号,时间尽可能的优。(1)因为有并且只有一组,我们可以先将数组排序,设置两个指针,一前一后,通过和的不同的情况移动指针,但是因为有了排序的过程,时间复杂度NlogNstruct node{ int value; int indexx;}N[100005];bool comp(node a

2015-05-20 00:31:12 910

原创 【dp】Leetcode House Robber&& House Robber II

很基础的动态规划。因为不能取连续的,所以要么只取第i-1个或者取第i-2和第i个,去最大值,列出状态转移方程即可。class Solution {public: int rob(vector& nums) { int n=nums.size(); if(n==0)//需要特判,否则为0时越界 return 0; els

2015-05-18 23:39:21 918

原创 [汇编] 在屏幕中央显示时钟

很简单的一段代码。可能对于刚学习的同学有两点知识需要补充:(1)       mov ah,2Ch     ;ch=时,cl=分,dh=秒         用来获取系统的时间,并且分别放在注释中的寄存器中      int 21h         ;获取时间(2)   用来设置光标的位置 setshow proc ;设置光标位置 mov dh,12

2015-05-18 23:10:27 4747

转载 要怎样努力,才能成为很厉害的人

首先,少年,答应别人的承诺,就一定要兑现。我以前啊,和你一样,很想成为一个很厉害很厉害很厉害的人。喜欢看热血的东西,幻想自己是屠龙的勇士,登塔的先锋,我左手有剑,右手有光,没头没脑的燃烧自己,敌人的骑军来了,我说你们何人堪与之战,我的女人在等我。后来我现实了一点,我觉得我要成为那种说走就走,说日就日的男人,我梳大背头,流浪在欧洲或者新几内亚的,我拍孩子,拍野兽,拍流浪的雏妓

2015-05-18 10:11:14 1303

转载 技术路线的核心竞争力

起了一个不好听的标题。工作一年多了,也已经开始带新人了。听到那些比我年纪大的人叫我导师,我经常忍不住翻白眼。我想写一些见解,写一些如果我上大学的时候看到会受益的东西。首先澄清一点,千万不要听信有些过来人所谓【学算法在工作中基本用不上,但学它可以锻炼你的思维】这种褒贬参半的话。确实有些技术人员不太懂算法,但也伴随着产品的成功发了家 —— 还有人不懂算法

2015-05-17 20:06:42 1153 2

原创 Leetcode Number of 1 Bits(位运算)

判断一个无符号整数的二进制中有多少个1。(1)先来一种比较好想到的方法:将数与1进行&运算,若为1则证明最后一位是1,然后再将原来的数字右移一位,依次直到原来的数字为0结束。class Solution {public: int hammingWeight(uint32_t n) { int sum=0; while(n) {

2015-05-17 00:27:19 929

原创 Leetcode Happy Number

这题本来想找数学规律来着,但是没有找到。。(有路过的大牛还请指导)就根据题目来看,要么出现1,返回true退出;要么在循环的过程中出现了以前出现的数(这点题目中给出了描述or it loops endlessly in a cycle which does not include 1. )。所以将过程中出现的数存入set中,每次插入 的时候,如果发现size大小没有变,那么一定是插入了重复

2015-05-16 23:40:29 823

原创 Leetcode Isomorphic Strings

题意很简单,判断两个字符串是不是同构,也就是说字母之间的映射关系是一对一的,采用map对应即可。注意,要分别对s和t都要判断一遍,否则类似  s="abe", t="cdc"就会判断出错。class Solution {public: bool isIsomorphic(string s, string t) { map mp; int len=s.length(

2015-05-16 00:08:20 797

原创 汇编-英文字符串大小写之间的转换

提供大小写转换两种功能,逻辑很简单。将输入的 字符串根据ascii之间的转换关系修改大小写,最后将字符串后添加$,输出字符串即可。; multi-segment executable file template.data segment ; add your data here! question db "you can press 1(big->small)or2(sma

2015-05-14 19:40:36 2896

原创 win7下使用U盘安装Ubuntu Kylin完全详解教程

安装失败了好几次,看了很多篇博客,最后终于成功了,并且做了这个win7下使用U盘安装Ubuntu的教程,希望能给大家带来帮助!详细的图文步骤如下:部分操作步骤转自 http://blog.csdn.net/dreamthen/article/details/8765472,感谢。1、本次使用的是64位的ubuntu Kylin桌面版,iso镜像可以自己去官网下载,大约700MB2.

2015-05-13 22:53:29 5511

原创 hdu 3037(Lucas定理,大组合数取模)

先来关于排列组合中 插板法的应用基础:所以对于这个问题,我们可以抽象成 将m个球放入n个盒子里的方法数(可以有空的盒子),其中m的范围是0~m#include#includeusing namespace std;#define lld long longlld Ext_gcd(lld a,lld b,lld &x,lld &y){ if(b==0)

2015-05-12 23:57:00 1537

原创 最长公共子序列(仅借助数组dp本身在O(m+n)时间内构造最长公共子序列)

算法课上机作业,想复杂了。。给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。 改进LCS函数,不使用数组b而仅借助数组c本身在O(m+n)时间内构造最长公共子序列。原来的代码:void LCSLength(char *x ,char *y,int m,int n, int **c, int **b){ int i ,j

2015-05-12 23:55:00 1484

转载 线段树为什么要开四倍空间

转自: http://scinart.github.io/acm/2014/03/19/acm-segment-tree-space-analysis/最近在看《具体数学》,这篇当做是一个练习吧。假设我们用一个数组来头轻脚重地存储一个线段树,根节点是1,孩子节点分别是2n, 2n+1, 那么,设线段长为L(即[1..L+1))设树的高度为H,对H,有:H(L)=

2015-05-12 16:31:49 2652

原创 dijkstra最短路径及其输出(数学建模)

高中同学让我求8个菜市场和35个销售点(他们之间还会有15个路口)之间35*8=280个组合分别的最短路径及其输出。最短路水题,嘿嘿。能用自己学到的知识帮助别人解决问题真是极好的享受。具体注释可以见代码,写的蛮清楚的。#include#include#include#include#includeusing namespace std; #define INF 0x3f3f

2015-05-11 23:43:30 6064

原创 hdu 1237(中缀表达式转后缀并计算)

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。思路:一开始想的是中缀表达式转后缀,但是这样既要double又要存char,不

2015-05-11 23:41:47 1369

转载 byvoid面试阿里星 面试官的评价--我辈楷模

转自  http://blog.sina.com.cn/s/blog_631d3a630101jzhi.html一直都听说这位同学非常牛,但不知道为什么近几周有这么大的影响力。今天抽时间百度了一下,终于找到了喧嚣之源。原来是byvoid同学的阿里星面试结果被泄露了。我看到这张图片中HR的评语之后也震惊了。网上很难找到这张图片,估计是封杀了,阿里内部也做了调查,不知道最后结果怎样

2015-05-09 20:09:18 27692

原创 湖南多校对抗赛(csu 1560)

简单的bfs搜索题,对每个初始的水滴依次扩展,当达到规定步数时跳出。这题还是有坑点的,对于每个初始的水滴,已经访问过的位置不再访问,但是对于不同的水滴,别的水滴已经访问过的,对于当前水滴来说可能还要访问,才能使扩展的范围最大。#include#include#include#include#includeusing namespace std;struct node{ i

2015-05-08 21:33:44 1204

原创 zoj 3332 Strange Country II

某人到了一个陌生城市,这个城市的特点就是:每两个城市之间都有飞机直接到达,不是双向的,给出城市的数量n,以及n * (n - 1) / 2  条城市 x  到 城市 y 的路,(表示x 到 y 有飞机),问你是不是可以每个城市都经过并且只经过一次可以的话,输出经过的城市的路径,否则输出Impossible。解:遍历每个点作为dfs的起点,如果能够实现遍历所有的点

2015-05-08 20:16:28 898

原创 zoj 3861 Valid Pattern Lock(以及自己对dfs的一些理解)

解法:先将每个点之间的可达性用c[][]记录,为0的话代表可以直接走到。但是如果要进行像3 1 2 这样的走法的话必须要先经过他们中间的点2,否则是不能走的。用c[i][j]记录i和j之间必须要经过的点。然后进行dfs搜索即可。经过这道题,自己对dfs的递归过程又有了更加深刻的了解。一开始的时候对dfs里面的参数有些疑虑,-->像这样dfs(s[0],0),但是这样的话,每次都要先判断c[

2015-05-08 12:58:47 967

原创 codeforces #298题解

A题有很多可行的构造方法,我是采取的对于每个数 i 和 i+n/2配对的方式。对于4特别处理,为2 4 1 3#include#includeusing namespace std;int main(){ int n; cin>>n; if(n==1) { cout<<1<<endl; cout<<1<<endl;

2015-05-08 12:27:39 887

原创 概率dp入门的简单题(hdu 4405,牡丹江,codeforces)

最近学习了一下概率dp,感觉没有想象中的那么难。主要还是状态的转移方程的构建。对于”求概率正推,求期望反推“这句话有了初步的理解。期望的意思是说你现在处在一个状态,还需要几步到达最终状态,这是一个期望值,假如我现在已经在目标状态,那么期望是0,即解决了初始化的问题,否则并不知道起点的期望值。附上几道入门题:hdu 4405  http://acm.hdu.edu.cn/showpr

2015-05-07 23:58:16 1072

原创 “赛码杯“题解(hdu 5214 ,5223)

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=5214A:题意:给出一个区间的初始端点L,R,并且给出递推关系式,区间的个数范围(10的6次方),求是否存在三个不交叉的区间。先说算法:贪心。一边扫过去记录左端点的最大值和右端点的最大值,这样使得中间的范围尽可能大。然后去遍历是否存在这样的不交叉区间。坑点:wa了好几次。。  首先,给出的

2015-05-07 23:47:43 1289

gdb多线程调试小文件

基于Linux64位的多线程小程序,答案就在某个线程的堆栈中,请使用gdb命令查看哈

2016-03-03

随机数生成器

随机数生成器,自定义范围,支持跳变,适用于各个活动的抽奖

2015-11-30

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

TA关注的人

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