- 博客(176)
- 收藏
- 关注
原创 POJ-1680(递归模拟)
题目:http://poj.org/problem?id=1680分析:父进程wait会等到子进程执行完成之后才继续下一步,每个进程都执行相同的代码,刚好和递归函数调用的方式一致。需要注意的是【ProcessID==0】每个子进程仅打印一次,对应到递归调用中,就是进入函数时打印一次。#include const int kRoot = 1000;int N, K, P;b
2017-02-12 14:31:53
843
原创 POJ-3856(模拟构造目录树)
题目:http://poj.org/problem?id=3856分析:根据命令输出构造出目录树,需要注意的地方:(1)cd 后跟的目录可能之前没有出现过;(2)根据deltree作为case的最后一行输入,而不是题目中说的每个case之后会跟一个空行(sample input里第3个和第4个case之间就没有空行)#include #include #include #in
2017-02-01 10:23:26
570
原创 POJ-2022(简单HTML校验)
题目:http://poj.org/problem?id=2022分析:只有3种子节点,只需让每个节点【开闭】统一即可#include #include #include #include using namespace std;enum{ERROR, WAIT_FOR_LEFT, WAIT_FOR_RIGHT};bool check(const string& a
2017-01-28 17:29:01
435
原创 微软2017实习生在线笔试题——hihocoder 1289——403 Forbidden
题目:http://hihocoder.com/problemset/problem/1289分析:有N条已知的前缀字符串,回答M个query,每个query找到这N个字符串中第一个匹配的项,自然的想到O(length)复杂度的字典树Trie。由于(1)1 (2)字符串仅由01组成 >>> Trie的每个node仅含有2个子节点(3)每个字符串最多包含32个字符 >>> 一
2016-04-10 16:10:22
1477
原创 POJ-1316(类素数筛选法)
题目:http://poj.org/problem?id=1316分析:如果按照定义对每个数进行判断则需要O(N*N)的时间,但用类似筛素数的思想,我们可以mark出所有不满足条件的,自然而然的就可以输出满足条件的了,时间复杂度是O(Nlog10(N))#include const int MAX_N = 10000;bool generated[MAX_N + 1] = {
2016-01-14 00:05:38
692
原创 POJ-1363(模拟出栈)
题目:http://poj.org/problem?id=1363分析:简单的栈模拟,看status上之前很多菊苣都是0ms的空间也很小,不知道是怎么做的呢#include int n, a[1005], st[1005];bool check(){ int top = 0, *p = a + 1, i = 1; while(p - a <= n){ while(!
2016-01-13 00:37:01
557
原创 POJ-1321(类8皇后问题)
题目:http://poj.org/problem?id=1321分析:题目数据量很小暴搜即可#include int n, k, tot;char board[10][10];void dfs(int x, int r, int u){ if(!x){ ++tot; return; } if(r >= n) return; //try to plac
2016-01-12 00:56:59
368
原创 POJ-1300(汉密尔顿回路)
题目:http://poj.org/problem?id=1300分析:简单的汉密尔顿回路问题,需要注意的是要回到node 0,因此需要判断在有两个奇度node时,start node必须是非0的那个,没有判断连通性,1A,看了discuss之后,发现竟然“判断连通性会WA,不判断就AC”,也是醉了#include #include #include #include us
2016-01-11 00:48:53
637
原创 网易游戏2016校园招聘“游戏研发&平台开发”在线笔试——D题 Difficult Player Grouping
注意,lz并没有参加在线笔试,只是拿来练习一下,由于在hihocoder上并不能提交,只能用样例测试,所以不保证答案完全正确题目:http://hihocoder.com/contest/ntest2015septdev/problem/4分析:贪心,用multiset维护,每次取出数量最多的3类Hero组成一个队。设Hero种类有N种,玩家总数为M个,由于每次总数减3,则总的复杂度为
2015-09-18 15:17:23
1113
原创 网易游戏2016校园招聘“游戏研发&平台开发”在线笔试——C题 Complicated Expression
注意,lz并没有参加在线笔试,只是拿来练习一下,由于在hihocoder上并不能提交,只能用样例测试,所以不保证答案完全正确题目:http://hihocoder.com/contest/ntest2015septdev/problem/3分析:模拟题,不过可以通过【宏定义】+【异常处理】来简化代码,风格有点pythonic,感觉还是比较优雅的#include #include
2015-09-18 14:48:14
983
原创 网易游戏2016校园招聘“游戏研发&平台开发”在线笔试——A题 Amusing Digits
注意,lz并没有参加在线笔试,只是拿来练习一下,由于在hihocoder上并不能提交,只能用样例测试,所以不保证答案完全正确题目:http://hihocoder.com/contest/ntest2015septdev/problem/1分析:模拟题,贪心即可,对每一个9尝试找出最靠前的7、0、6,使得其满足9706的子串顺序,时间复杂度是O(N),空间复杂度是O(N)#includ
2015-09-16 20:15:26
1404
原创 网易游戏2016校园招聘“游戏研发&平台开发”在线笔试——B题 Best Compression Algorithms
注意,lz并没有参加在线笔试,只是拿来练习一下,由于在hihocoder上并不能提交,只能用样例测试,所以不保证答案完全正确题目:http://hihocoder.com/contest/ntest2015septdev/problem/2分析:模拟题,递归降解即可,最坏复杂度为O(N^2),串的长度不超过100,所以复杂度可以接受#include #include #includ
2015-09-16 20:08:58
788
原创 PE-43(枚举)
题目:https://projecteuler.net/problem=43分析:数据量不大,一共也就10! = 3628800种排列,枚举即可,这里有几个可以优化的地方:(1)0不能出现在数字的首位,所以枚举时从1为开头即可(2)对容易剪枝的条件先判断,例如d2d3d4能被2整除,则d4必须是偶数,这样一半的情况下后面的if都不用算了;对于d4d5d6能被5整除,则d6必须是5或者0
2015-09-10 00:58:56
491
原创 POJ-3803(模拟Sed,BFS)
题目:http://poj.org/problem?id=3803分析:数据量不大,直接BFS即可#include #include #include #include using namespace std;int n;string a[10], b[10], s, t;bool sub(string& p, const string& a, const str
2015-09-09 11:03:44
548
原创 PE32-Pandigital products
题目:https://projecteuler.net/problem=32题意:求所有满足如下条件的数z的和:z能分解成两个数x、y的积,且x、y、z中的digits刚好是1~9各出现一次分析:1~9的permutation总共也就362880,对其枚举即可,这里有一个重要的剪枝:x末位 * y末位 % 10如果不等于z的末位,则继续下一次枚举,实测发现加上这一剪枝比不加的情况快1倍多
2015-09-09 02:11:17
470
原创 PE49-Prime permutations
题目:https://projecteuler.net/problem=49思路:题目数据范围不大,直接找出全部的4位数素数,以四位素数的最小permutation为key建立hash,再从中找出差为3330的等差数列即可def findArithmeticProgression(arr, dif): for x in arr: if x + dif in arr and x + d
2015-09-09 01:26:40
393
原创 PE2-Even Fibonacci numbers
题目:https://projecteuler.net/archives思路:题目不难,可以用来练练python,求出四百万以内所有偶数斐波那契数的和,数据范围不大,很容易想到依次产生4*10^6以内的所有数,遇到偶数就加上,由于递推到斐波那契数N的只需要O(log2(N))步,所以30步以内我们就能得到结果limit = 4 * 10**6total = 0a, b = 1,
2015-09-09 00:43:27
389
原创 POJ-1885(列表数组)
题目:http://poj.org/problem?id=1885题目中说不超过10000个不同的单词,实测是扯淡的,单词数量大于20000个#include #include #include #include #include using namespace std;#define MAX_LIST 100#define MAX_CAPACITY 100 in
2015-08-25 19:07:28
345
原创 HDOJ-3528(If语句匹配模拟器)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3528和POJ2314类似的思想,就是一个parser,画画状态转换关系就行了,不过需要注意的是:对单个case,遇到连续的两个'\n'之后,本case就不能再getchar了#include #include #include using namespace std;struct
2015-08-24 23:55:40
411
原创 POJ-2799(找到一组IP的最小网络)
题目:http://poj.org/problem?id=2799思路:找出IP的最长公共前缀即最小网络,长度即子网掩码全1的长度#include #define MAX 1005int main(){ unsigned n, i, a, b, c, d, ip, net; int len; while(scanf("%u", &n) == 1){ scanf("
2015-08-18 22:09:54
390
原创 POJ-2248(加法链,DFS)
题目:http://poj.org/problem?id=2248大意:序列第一个数为1,之后的每个数都等于之前的任意两个数(可以相同)相加,问最后一个数是N的情况下,求一个最短的序列思路:搜索,确定上下界,下界一定不小于log2(N)+1,上届即目前最优序列的长度,搜索时,用每一层搜索最后一个数和之前的数相加#include #include #include us
2015-08-18 21:21:02
1476
原创 POJ-3326(模拟登录统计)
题目:http://poj.org/problem?id=3326题目本身没什么难度,本来想着是不是还得搞个线段树啥的,看了下数据量,暴力即可,这里用了一个标志位,标记是否对某个user的记录进行了预处理,有点“写时复制”的赶脚#include #include #include using namespace std;#define MAX_N 1005#define
2015-08-14 21:19:44
401
原创 一个包子引发的血案——不加锁的执行一个简单函数
今天在nowcoder的每日一题上看到这么一个问题,说是人人网的题,原题连接:http://www.nowcoder.com/discuss/1968?type=&order=0&pos=5&page=0对于下面这个函数,int add(int *x,int *y,int *z){ *x += *x; *y += *x; *z += *y; return *z
2015-08-14 12:01:20
522
原创 HDOJ-2835(最佳置换算法)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2835如果数据以后都再也不会使用,则将其换出必然是最优的,但如果缓存中的数据以后都还会使用,那到底换出哪一个好呢?直观上想,感觉换出最远下次使用的数据更好,但如何证明其是最佳的,不会呢。。。#include #include #include using namespace std;
2015-08-13 17:28:02
560
原创 HDOJ-2871(线段树)
真是个好题,虽然WA了好几次,但都是自己SB。。。包含了线段树所有的操作,看了这篇博文又加深了一次理解:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html掉进的坑:(1)因为每reset一次,就重新build一次,TLE,看了discuss才想起来,同一个case中reset,用update就行
2015-08-13 15:54:11
420
原创 POJ-2187(旋转卡壳)
题目:http://poj.org/problem?id=2187今天终于耐下心来学习凸包和旋转卡壳了,以poj的经典例题2187为例,学习主要参考了以下两篇博文:http://www.cnblogs.com/Booble/archive/2011/04/03/2004865.htmlhttp://blog.youkuaiyun.com/x314542916/article/details/794
2015-08-12 23:02:55
612
原创 ZOJ-1635(模拟pstree)
模拟打印文件树,难点在文件夹的开闭,如果仅仅将子文件缩进,则问题很简单,递归即可,题目要求显示文件夹的开闭(用'|'),所以直接递归打印不能解决(因为可能需要在前面打印'|'),这里我选择将需要打印的所有符号保存在一个缓冲区char型数组里,修改缓冲区再打印缓冲区 #include #include #include #include #include #inclu
2015-08-12 20:09:40
484
原创 最小编辑代价(动态规划)
在nowcoder上的题目,原题如下:对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串,定义c0,c1,c2分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均小于等于300,且三种代价值均小于等于100。测试样例:
2015-08-06 01:06:58
1196
原创 最长公共子字符串(动态规划)
和经典DP最长公共子串(不要求字符连续)不同,最长公共子字符串要求字符是连续的class LongestSubstring {public: int findLongest(string A, int n, string B, int m) { //f[i][j] represent the longest common substring starting wi
2015-08-06 01:02:02
418
原创 非负分数的循环小数位长度
根据竖除法我们知道,过程是用余数乘10除以分母,由于一个数n的余数最多有n个,所以n步以内就可以找到循环节了原题连接:http://www.geeksforgeeks.org/find-length-period-decimal-value-1n/def GetFractionPeriod(x, y): """ Find out the period of fraction part
2015-08-05 19:33:21
383
原创 不用乘、除、减、平方打印前N个平方数
其实挺简单的一个问题,原题链接:http://www.geeksforgeeks.org/print-squares-first-n-natural-numbers-without-using/def PrintFirstNSquareNumbers(n): """ Print first n numbers without using *, /, -, ** or power By t
2015-08-05 19:02:38
431
原创 第N个只包含3和4的数
论文看不进去,到GeeksforGeeks思考个问题。。。原题连接:http://www.geeksforgeeks.org/find-nth-number-number-system-3-4/题目大意是,找出第N个十进制数,每一位要么是3要么是4,前几个符合条件的数为:3, 4, 33, 34, 43, 44, 333, 334, 343, 344, 433, 434, 443, 444
2015-08-05 18:48:30
583
原创 HDU-4217(树状数组)
题意就是在1~N中每次找到第k小的数并删除,范围固定第k小的数,就是树状数组或者线段树的应用,一个细节是结果需要用long long,因为262144*(262144+1)/2超过了32位表示范围。#include #include #define MAX 262200int n, q, c[MAX];inline int lowbit(int x){ return x &
2015-08-01 23:28:21
734
原创 ZOJ-1243(parse URL)
刷刷水题练练手速#include #include using namespace std;struct URL{ string protocol; string host; string port; string path;};void parseUrl(const string& s, URL& url){ size_t p = s.find(":/
2015-08-01 21:51:55
405
原创 POJ-3699(模拟SQL查询)
好久没做题了,手速慢得不成样子了呀,写这个水题写了2个小时,好在1A了。。。没什么难度,就是麻烦,注意输出是居中就对了#include #include #include #include #include #include #include using namespace std;#define MAX_COL 12#define MAX_ROW 10
2015-08-01 20:53:37
435
原创 跳表(SkipList)
最近在看leveldb的源码,看到核心的skiplist时发现自己浑浑噩噩的,本来就不太懂,.h文件里还竟是模板迭代器啥的,于是决定还是先吧思路理清楚,都提倡不要重复发明轮子,但只有熟悉轮子的制作过程,用起来才可能得心应手啊。这篇图文并茂的博文将跳表的基本操作描述的很不错:http://kenby.iteye.com/blog/1187303为了便于忘了再看时能很快懂(源码真心不好看呀),
2015-07-27 12:56:50
417
原创 POJ-1056(Trie)
题目:http://poj.org/problem?id=1056题意:判断一组字符串中是否有两个串A和串B,且A是B的前缀,通过将串依次插入Trie即可判断当前串是否是前面串的前缀,和前面串是否有当前串的前缀。#include #define MAX_N 200005int N, NEX;struct Node{ Node* ch[2]; bool isLeaf(){
2015-04-28 00:15:48
575
原创 POJ-1694(贪心)
题目:http://poj.org/problem?id=1694容易想到,从树上取下来的石子可以在别的子树上使用,对以X为根的子树进行Mark,假设X有N个孩子,则N个孩子必须都挂上石子之后,X才能被挂上石子,这个对这N个孩子挂石子的过程中,如果第i个孩子没有挂上石子的时候,就试图去挂j,则肯定不会优于先挂完i再去挂j,毕竟同时进行不会要求更少的总石子数,所以我们可以先挂上一个孩子,再去挂另
2015-04-15 01:07:08
697
原创 hihocoder-1142(三分法)
感觉hihocoder和别的OJ有点不一样呢,因为可以看到关于一些常用算法的解释,感觉这个三分法讲的蛮通俗易懂呢:********************************************************* 下面是引用hihocoder上的讲解 *********************************************************在
2015-04-12 13:24:42
847
原创 POJ-2246(模拟矩阵相乘)
题目:http://poj.org/problem?id=2246题目本身没什么难度,只不过不同风格的程序写出来不一样,这里我用了异常+递归讲解:递归降解是求解算术运算的利器;当矩阵维数不匹配时,抛出异常,然后递归栈自动回退到main中的catch,栈上的局部变量也会自动析构,感觉这个风格有点pythonic呢#include #include #include using
2015-04-11 23:34:26
549
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人