数据结构和算法
Just_a_GirL
这个作者很懒,什么都没留下…
展开
-
poj 3126(素数打表)
先对素数进行打表处理,以后可能也会用到 对bfs思想的一个理解/* 题意:一个四位数 ,从一个素数变成另一个素数,每次只能改变其中一位数,并且每次新形成的数字必须是素数,需要几步达到目标素数 */ 代码: #include<cstdio>#include<cstring>#include<algorithm>#define N 10000using namespace std;in原创 2016-03-15 13:10:48 · 437 阅读 · 0 评论 -
枚举
POJ 2568 题意有点难理解,留着以后复习复习 DescriptionAccounting for Computer Machinists (ACM) has sufferred from the Y2K bug and lost some vital data for preparing annual report for MS Inc. All what they remember原创 2016-03-15 12:57:30 · 177 阅读 · 0 评论 -
这个题,这个分析很重要啊!
POJ 2965 大神思路: 对于一个“+”,对它所在的行列的每一个位置做题目中的flip,结果是只有该“+”会变成“-”,其余位置没有变化。于是就对初始状态下所有“+”都做一次上述操作,最终的结果是一部分位置对比初始状态做了奇数次翻转,另一部分做了偶数次。偶数次等于没翻转,因此只要打印出奇数次的位置即可。94MS膜拜啊……orz …… orz …… orz orz …… orz ……原创 2016-03-15 12:53:42 · 204 阅读 · 0 评论 -
简单字符串处理
这里需要注意,有时候打表比分析更快!POJ 1298 题意:给一段文字,字母全部按照他给的表转换,其他字符不变思路:模拟吧。不过受它的数据的影响,我开始没有考虑到中间有多个空格的情况。Wa了一次注意学习以下ignore()这个函数cin.ignore( 5, ‘c’ ) 的是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字原创 2016-03-15 12:52:51 · 213 阅读 · 0 评论 -
POJ 1423 神奇公式计算N!位数
题目大意:给定一个整数n输出n!一共有多少位数字解题思路:看了大牛的博客 两种解法 1:1+lg(1)+lg(2)+..+lg(n) 2:strling公式:n!的位数=log10(sqrt(2*pi*n))+n*log10(n/e) Strling公式的意义在于:当n足够大之后n!计算起来十分困难,虽然有很多关于n!的不等式,但并不能很好的对阶乘结果进行估计,尤其是n很大之后,误差将会非常原创 2016-03-15 12:52:05 · 660 阅读 · 0 评论 -
二分和枚举(主要是二分思想)
通常二分的题目都会使left=0,right=可能的最大值,然后再left 和right之间寻找最大值。 而最重要的就是能够把二分题目分析称这个思想。(目前,我的个人理解)第一个是求最大的最小值,第二个是最小的最大值,好好理解一下疯牛这道题就是先排序,然后知道最大的距离,在0 和MAX之间寻找答案 judge的想法是:判断这个当前距离,如果有另一个栅栏与他的距离大于当前距离,则假定可以安排牛,然原创 2016-03-15 12:50:57 · 3186 阅读 · 0 评论 -
猜一猜这干啥呢。。
#include<cstdio>#include<cstring>#include<string>#include<iostream>using namespace std;int main(){ int n; while(scanf("%d",&n),n) { string s; char list[102][200];原创 2016-03-14 17:28:17 · 282 阅读 · 0 评论 -
拓扑排序
一道例题: 对于给出的字母,确定大小关系 poj1094_toposort 题意:给你一些大写字母间的偏序关系,然后让你判断能否唯一确定它们之间的关系,或者所给关系是矛盾的,或者到最后也不能确定它们之间的关系。分析:用拓扑排序:1.拓扑排序可以用栈来实现,每次入栈的是入度为0的节点。1.拓扑排序的结果一般分为三种情况:1、可以判断 2、有环出现了矛盾 3、条件不足,不能判断.2.这道题不仅需要原创 2016-03-14 17:26:40 · 265 阅读 · 0 评论 -
太弱了。。水题
HDU 1002 没谁了。。。 不过,sscanf很重要!!!!!!!!!!!!!!!#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>using namespace std;int main(){ char a[20],b[20]; while(scanf("%s%s",a,原创 2016-03-14 17:25:41 · 201 阅读 · 0 评论 -
求解方程
这个二分 很好啊!题目: Description 现给出一个方程式如下:8*x^4 + 2*x^2 + 7*x^3 + 3*x + 6 == Y知道了一个实数Y值,问是否存在一个实数x使得等式成立,并且要求0<=x<=100.Input 第一行给出一个整数T(1 <= T <= 100),表示有T组数据。每组给出一个实数Y。(fabs(Y) <= 1e10);Output 输出x,答案精确原创 2016-03-14 17:24:43 · 335 阅读 · 0 评论 -
暴力
HDU1172主要是第二个是深搜的思想,值得学习,第一个纯暴力,一定要记住,暴力总比没思路强!!! Description猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。 比如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存原创 2016-03-14 17:23:32 · 259 阅读 · 0 评论 -
位运算(含应用)
亦或 篇: 一直都觉得亦或非常神奇,却又让我很不理解,那我就一点一点积累他的巧妙之处吧 字母大小写转换 : a-A:a^32 A-a:A^32【collect】 非常好的位运算应用!!! 求一个整数的二进制中1的个数 题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。 分析:这是一道很基本的考查位运算的面试题。包括微原创 2016-03-15 12:58:24 · 184 阅读 · 0 评论 -
字符串暴力
学姐思路非常清下,膜拜orz…orz POJ 1035 大致题意: 输入一部字典,输入若干单词 1、 若某个单词能在字典中找到,则输出corret 2、 若某个单词能通过 变换 或 删除 或 添加一个字符后,在字典中找得到,则输出这些单词,输出顺序根据 输入的那部字典的字典序 3、 若某个单词无论操作与否都无法在字典中找得到,则输出空暴力吧!模拟吧! 基本思路就是逐个比较 待查原创 2016-03-15 12:59:20 · 182 阅读 · 0 评论 -
2-SAT
poj 3207 http://blog.sina.com.cn/s/blog_64675f540100k13v.html poj 3678 http://blog.sina.com.cn/s/blog_64675f540100k15b.html poj 3683 http://blog.sina.com.cn/s/blog_64675f540100k1cd.html poj 3648 htt转载 2016-03-15 13:00:06 · 282 阅读 · 0 评论 -
关于概率期望
做题量太少,看到expected time 都不知道要干嘛……今天比赛我一道题也不想做,我要一点一点进步,不要浮躁!加油!Crossing Rivers Time Limit: 2000/1000 MS (Java/Others)原创 2016-03-15 13:10:15 · 287 阅读 · 0 评论 -
HDU 1106
Problem Description 输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。Input 输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字原创 2016-03-15 13:08:11 · 207 阅读 · 0 评论 -
优先队列
使用优先队列,首先要包函STL头文件"queue"#include<stdio.h> #include<functional> #include<queue> #include<vector> using namespace std; //定义结构,使用运算符重载,自定义优先级1 struct cmp1{ bool operator ()(int &a,int原创 2016-03-15 13:07:15 · 221 阅读 · 0 评论 -
pow()
pow是double形式的pow(0,0)=1.000000;原创 2016-03-15 13:06:42 · 337 阅读 · 0 评论 -
20140816题目小节
A. 关于DP,值得一学,好好思考一下递推过程 加油! 题目大意:从(0,0)走到(n,m)只能向右或者向下,初始有能量1,到达某一点要保证加完权值之后大于0,求还需添加最小能量为多少 //Magic Grid 分析:可以用光搜,也可以DP 代码:#include <iostream>#include <cstdio>#include <cstdlib>#include <cstr原创 2016-03-15 13:06:14 · 235 阅读 · 0 评论 -
map 详细用法(常看看哦)
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序原创 2016-03-15 13:05:39 · 359 阅读 · 0 评论 -
SSCANF这才是我想要的。。
sscanf 名称: sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 … ); int scanf( const char *format [,argument]… ); 说明: sscanf与scanf类似,都是原创 2016-03-15 13:03:19 · 202 阅读 · 0 评论 -
二分题目
POJ 3273 有点抽象,需要温故而知新 题意:给你天数n,和每天需要花的钱,让你把这些天分成m份(每份都是连续的天),要求每份的和尽量少,输出这个和。 代码: //代码的思路即最后的答案#include <iostream> using namespace std; #define maxn 100000 int day[maxn]; int n,m; int so原创 2016-03-15 13:02:37 · 303 阅读 · 0 评论 -
并查集
首先要熟练并查集基本模板: 1 #include <stdio.h> 2 3 const int MAXN = 100; /*结点数目上线*/ 4 int pa[MAXN]; /*p[x]表示x的父节点*/ 5 int rank[MAXN]; /*rank[x]是x的高度的一个上界*/ 6 7 void make_set(int x) 8 {/*创建一个单元集*/ 9原创 2016-03-15 13:02:01 · 198 阅读 · 0 评论 -
树状数组-线段树
POJ 3468 操作:区间价值,区间求和poj 3468 树状数组解法一 算法 树状数组天生用来动态维护数组前缀和,其特点是每次更新一个元素的值,查询只能查数组的前缀和, 但这个题目求的是某一区间的数组和,而且要支持批量更新某一区间内元素的值,怎么办呢?实际上, 还是可以把问题转化为求数组的前缀和。首先,看更新操作update(s, t, d)把区间A[s]...A[t]都增加d,转载 2016-03-15 13:01:14 · 233 阅读 · 0 评论 -
计算几何
要好好复习一下 1.POJ 1106 两个代码,第一个分析思路很好,第二个很简洁,但是我估计应该会慢一点 First。 首先,我们可以把圆以外的点去掉。之后,一开始想到的是枚举直径和x轴的夹角去算,但这样精度不能保证,而且不好算,于是否决掉了。后来想了一下,这个题目实际可以转化成一个圆里面有一些点,然后用一条直径把圆切成两半,这样哪一半里面的点多就取哪一半。同时不难想到,一定可以构造出这原创 2016-03-14 15:10:36 · 205 阅读 · 0 评论 -
DP
一、 HDU 1081 求最大和的子矩阵 100*100矩阵解题思路:这道题是个DP问题,如果用穷举的方法的话,时间复杂度为O(N^4),会超时,所以我们就考虑用DP的方法。 #include <stdio.h>#include <string.h>int main(){const int size = 101;int Max,sum;int N,i,j,k,val,a[siz原创 2016-03-14 15:09:38 · 203 阅读 · 0 评论 -
最长公共子序列
http://972169909-qq-com.iteye.com/blog/1447946http://www.cnblogs.com/cykun/archive/2011/02/17/1957184.htmlhttp://blog.csdn.net/q3498233/article/details/5492481http://blog.csdn.net/q3498233/article/deta原创 2016-03-14 15:08:55 · 175 阅读 · 0 评论 -
最短路
注:我在修炼当中,博客完全是为了自己复习方便看得,如果你不慎点入了我的博客,看看就好,不要相信,误人子弟就不好了- -先贴模板Dijkstra#define inf 0x3fffffff#define M 105int dist[M], map[M][M], n;bool mark[M];void init (){ int i, j; for (i = 1; i <= n;原创 2016-03-09 15:04:32 · 275 阅读 · 0 评论 -
树状数组
(注:我在修炼当中,博客完全是为了自己复习方便看得,如果你不慎点入了我的博客,想看也可以,不过不要相信,万一我说错了呢- - ) 整理一下树状数组的知识,比较可惜的是,以前做题的心得写在word里,后来不小心中病毒了,就没有保存下来,现在还得重新来一遍,不过有新的收获哦。 树状数组查询和修改的时间复杂度都是O(logn)的。主要用于单点修改,区间查询,也可以区间修改,单点查询,我的新收获就在这里原创 2016-03-08 20:22:11 · 265 阅读 · 0 评论 -
最小生成树
注:我在修炼当中,博客完全是为了自己复习方便看得,如果你不慎点入了我的博客,看看就好,不要相信,误人子弟就不好了- -最小生成树有Prim 和 Kruskal 两种经典算法 先贴个模板出来,改天来更新Prim + 优先队列#include <iostream>#include <queue>#include<cstring>#include<cstdio>using namespace s原创 2016-03-09 14:46:53 · 247 阅读 · 0 评论 -
最小生成树之MST性质
在数据结构上看到这个性质的时候并不是很理解,觉得很抽象,所以我决定记录一下,以免以后又不理解了。其实就是一个 最优选择问题。原性质描述如下: 假设N = (V,{ E })是一个连通网,U 是顶点集V的一个非空子集。若(u , v )是一条具有最小权值(代价)的边,其中u∈U, v∈V - U,则必存在一棵包含边(u,v)的最小生成树。原创 2016-03-20 14:18:37 · 9003 阅读 · 3 评论 -
两个单链表交叉和判环问题
有两个单链表,只有数据,和下一个结点的信息。首先判环 环不要只想到O型环,还有6型环。可以用两个指针遍历单链表P1、P2。P1每次走一步,P2每次走两步。如果最后P2追上了P1,则有交叉。这个问题可以想象,两个人绕着操场跑步,第二个人比第一个人快,则第二个人一定会在某一圈与第一个人相遇。具体可以考虑有一个10步的圈子,从1到10。然后两个人从1开始粗发。步骤如下 P1 以 1.2.3.4. 5.原创 2016-03-18 20:27:13 · 769 阅读 · 0 评论 -
memset结构体初始化
memset可以方便的清空一个结构类型的变量或数组。 如: struct sample_struct { char csName[16]; int iSeq; int iType; }; 对于变量 struct sample_strcut stTest; 一般情况下,清空stTest的方法: stTest.csName[0]='\0'; stTest.原创 2016-03-16 18:49:39 · 42846 阅读 · 0 评论 -
走格子收获
eg:poj2632 code:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int a,b;int queue[101][101];int xx[4]= {-1,0,1,0}; //!!!!!!!注意这里方向的顺序必须和0、1、2、3保持一致!原创 2016-03-16 18:49:01 · 249 阅读 · 0 评论 -
是输入字符矩阵时
RT! 例如n*m的地图: mapp[12][12]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>> mapp[i][j];这样比较保准。原创 2016-03-16 18:48:22 · 412 阅读 · 0 评论 -
字符串输入处理
//poj 2996+---+---+---+---+---+---+---+---+ | .r.|:::|.b.|:q:|.k.|:::|.n.|:r:|+---+---+---+---+---+---+---+---+|:p:|.p.|:p:|.p.|:p:|.p.|:::|.p.|+---+---+---+---+---+---+---+---+|...|:::|.n.|:::|原创 2016-03-16 18:47:46 · 257 阅读 · 0 评论 -
poj1426
//poj 1426//看了老半天用有道也没弄明白什么意思,可能是做的题太少了//题干中/*题目:Given a positive integer n, write a program to find out a nonzero(multiple --- 是倍数的意思!!!)multiple m of n whose decimal representation contains原创 2016-03-16 18:47:12 · 355 阅读 · 0 评论 -
线段树
注:我在修炼当中,博客完全是为了自己复习方便看得,如果你不慎点入了我的博客,看看就好,不要相信,误人子弟就不好了- -模板是从别人那借鉴来的,暂时放在这模板一RMQ,查询区间最值下标—min#include<iostream>using namespace std;#define MAXN 100#define MAXIND 256 //线段树节点个数 //构建线段树,目的:得到M数组.原创 2016-03-09 15:12:02 · 301 阅读 · 0 评论 -
很像动态规划的贪心
以前自己存的代码了,看标题也不能回忆起来是啥意思,居然没留下来是什么题。。。先放在这把#include <iostream>using namespace std;int w[6] = {1,5,10,50,100},num[5],use[5];bool dfs(int v,int x){ if (x < 0) return false; int n = v /原创 2016-03-14 14:44:34 · 218 阅读 · 0 评论 -
东北赛选拔教训
一个小模拟,计算表达式的值,一直到最后没做出来,检查好半天才发现就是一个字幕结束符标错了!!!!虽然多做上这一道题并不会有多大优势,但是还是会觉得因为这一点点错误就没坐上特比特别的可惜,不要不在意这一点点马虎,这就是你没有实力的表现,实力就是能力加细节!!!吸取教训HDU 3347#include<cstdio>#include<cstring>#include<string>#inclu原创 2016-03-14 14:55:08 · 209 阅读 · 0 评论