01 2013 档案

摘要:题目:http://poj.org/problem?id=3087题意:给你两堆纸牌,让你通过数次洗牌动作使得洗牌之后的序列为给定序列。输出最小的洗牌次数。洗牌方法:把第二堆的第一张放在最下面,让后放第一堆最下面的那张,;轮流放。洗完之后,把下面的n张作为第一堆,上面的n张作为第二堆。做法:模拟纸牌的放法,一步步的放,当序列符合的时候就终止放。当纸牌的顺序和一开始的顺序相同的时候就输出-1。注意:经过n次洗牌之后,一定会得到和最开始的序列相同的时候,此时就是循环结代码:View Code 1 #include <iostream> 2 #include<cstdio> 阅读全文
posted @ 2013-01-27 20:11 琳&leen 阅读(191) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=3126题意:给你两个四位数,a和b,然后改变四位中的一位,从a改变到b,每次得到的数必须是素数,求最小改变次数注意:初始化问题,就是队列一开始一定要是空的。。。(wa了好几次)代码:View Code 1 #include <iostream> 2 #include<queue> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 queue<int>q; 7 int num[10010],m,n; 8 阅读全文
posted @ 2013-01-27 20:07 琳&leen 阅读(136) 评论(0) 推荐(0)
摘要:题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1451这个题弄了好久,其实这个中文就挺难理解的,,一开始理解错题意了,,然后后来问了问ZJH学长题意,弄明白的,提交之后还是不对,后来回到宿舍之后问了问LMM学姐,感觉他的方法很好还有就是用dp了一、用栈模拟思路:利用一个标记数组,a[],用于记为第i个字符是否为合法字符,若是则标记为1,否则标记为0,最后便利一遍,最长合法字串就是最长的连续的1的长度,子串的个数就是有几段连续的i就是几二、dpdp[]数组存储i位置最长的合法子串的长度, 阅读全文
posted @ 2013-01-27 19:41 琳&leen 阅读(161) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1426题意:给出一个整数n,(1 <= n <= 200)。求出任意一个它的倍数m,要求m必须只由十进制的'0'或'1'组成。注意:1、要求的这个数,大数肯定不能存,需要用数组存2、这个数的最高位一定是13、剩下的各个位只有两种可能,要么是1,要么是0,用bfs来处理4、停止bfs的条件是m%n==0,即可以利用上一位的余数×10%n,若等于0,则停止,否则继续。5、最后是输出部分,利用的是同余模定理处理,把*10操作转化为%2操作,逆向输出就可以了代码:View Code 1 # 阅读全文
posted @ 2013-01-26 21:25 琳&leen 阅读(135) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2251View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define pan(a,b,c) (a<=b&&b<=c) 5 using namespace std; 6 int dir[6][3]={{0,0,-1},{0,0,1},{-1,0,0},{1,0,0},{0,-1,0},{0,1,0}}; 7 int ex,ey,ez; 8 char str[35][35][35 阅读全文
posted @ 2013-01-26 13:54 琳&leen 阅读(140) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1321没什么难度,比较水。。。View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define pan(a,n) (a>=1&&a<=n) 5 using namespace std; 6 int n,k; 7 char str[10][10]; 8 int dire[4][2]={{1,0},{0,1}}; 9 int xvis[10],yvis[10];10 int num 阅读全文
posted @ 2013-01-26 13:53 琳&leen 阅读(165) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=3009题意:就是要求把一个冰壶从起点“2”用最少的步数移动到终点“3”其中0为移动区域,1为石头区域,冰壶会一直向着一个方向走下去,一直撞到石头或者到达终点才能改变方向,撞到石头时会停在石头前面而且这块石头会破碎,到终点会停止大概的思路就是:一个方向要是能走就就一直走下去一直到不能再往前走,然后就换方向(此时用while就可以解决,不需要递归调用),还有就是注意场地的恢复View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstrin 阅读全文
posted @ 2013-01-26 13:49 琳&leen 阅读(135) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=3083这个题吧,没什么难点,就是题意有点难懂,后来问了一下ZP,知道了是什么意思后就开始敲了,敲了一半,QC让我再去讲题,结果回到宿舍又把剩下的敲完的提交,然后1A题意主要是:给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走先输出左转优先时,从S到E的步数再输出右转优先时,从S到E的步数最后输出S到E的最短步数我设置的四个方向是,面向下为1,面向左为2,面向上为3,面向右为4代码:View Code 1 #include <iostream> 2 #include<cstring> 3 #include 阅读全文
posted @ 2013-01-23 23:57 琳&leen 阅读(193) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2488没什么难度,,,就是字典序,要注意一下,一开始没看见。。。唉。。。View Code 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 int a[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}}; 5 char str[2500]; 6 int are; 7 int flag; 8 int m,n; 9 int map[27][27];10 vo 阅读全文
posted @ 2013-01-22 21:20 琳&leen 阅读(142) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2418二叉排序树:View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 using namespace std; 6 int n=0; 7 typedef struct node 8 { 9 char s[31];10 int num;11 struct node *lchild;12 struct node *rchild;13 }btreenode,*b 阅读全文
posted @ 2013-01-22 17:38 琳&leen 阅读(139) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2513这个题的题意很好懂,感觉很简单,然后交了之后wa后来意识到是自己的思路不正确,其实就是欧拉回路的问题用到了trie树+并查集+欧拉代码:View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define max 500010 5 using namespace std; 6 struct node 7 { 8 int num; 9 int flag; 10 node *next[26]; 1... 阅读全文
posted @ 2013-01-22 17:35 琳&leen 阅读(136) 评论(0) 推荐(0)
摘要:priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queue 的理解?#include <iostream>#include <algorithm>#include <vector>usingnamespacestd;classpriority_queue{private:vector<int& 阅读全文
posted @ 2013-01-21 15:48 琳&leen 阅读(207) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=3349这道题太纠结了,卡了一个晚上,一开始题意理解错了,顺时针和逆时针没有看到,还有就是知道用哈希可是不知道怎样设置key的值来处理冲突,后来搜了一下解题报告然后说是取999983,然后就是用哈希链表,用到了指针,总是出错,错误太难找了,好不容易运行OK了,结果TLE,直接被伤,后来在discuss里有人说是用cin会超时,就改成了scanf,试了一下就A了,唉,这个纠结的啊。。。代码:View Code 1 #include <iostream> 2 #include<algorithm> 3 #includ 阅读全文
posted @ 2013-01-19 21:37 琳&leen 阅读(222) 评论(1) 推荐(0)
摘要:题目:http://poj.org/problem?id=1611并查集问题,rank[]记录与根节点的关系,num[]记录树的节点数View Code 1 #include <iostream> 2 #include<cstdio> 3 4 using namespace std; 5 int set[30010]; 6 int rank[30010]; 7 int num[30010]; 8 int find(int x) 9 {10 if(x!=set[x])11 {12 set[x]=find(set[x]);13 }14 retur... 阅读全文
posted @ 2013-01-18 20:37 琳&leen 阅读(122) 评论(0) 推荐(0)
摘要:地址:http://www.cppblog.com/Ylemzy/articles/98322.html树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每次修改A[i]后,调整前缀和S[]在最坏情况下会需要O(n)的时间。 当n非常大时,程序会运行得非常缓慢。 因此,这里我们引入“树状数组”,它的修改与求和都是O(logn)的,效率非常高。【理论】 为了.. 阅读全文
posted @ 2013-01-18 19:00 琳&leen 阅读(189) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2299一开始敲了一个冒泡,但是一看数据范围很大,会超时,然后想了想也没想出来什么好的方法,搜了一下解题报告,是逆序数的问题,线代学的不好,都忘了,搜了一下,用的是归并,还有一个方法是树状数组,没接触过树状数组,所以有了解了一下树状数组归并:在合并的过程中是将两个相邻并且有序的序列合并成一个有序序列,如以下两个有序序列Seq1:3 4 5Seq2:2 6 8 9合并成一个有序序:Seq:2 3 4 5 6 8 9对于序列seq1中的某个数a[i],序列seq2中的某个数a[j],如果a[i]<a[j],没有逆序数,如果a[i]&g 阅读全文
posted @ 2013-01-18 18:56 琳&leen 阅读(146) 评论(0) 推荐(0)