08 2013 档案

摘要:简单的欧几里得函数应用。 f(x,y) = f(y,x%y); f(x,y) = f(y*t+x,y) t为非负整数; 其时这道题还有好多优化,Discuss里面好多大神都弄到了0ms。。。Orz 我只水过去了。。。。 G++ 2400++,用C++ TLE.... 特别的注意 1 的情况 RE了好多次 1 #include 2 #include 3 4 using namespace std; 5 6 long long int rp[1000010]; 7 8 long long int gcd(long long int a,long long int b)... 阅读全文
posted @ 2013-08-31 09:35 好小孩 阅读(195) 评论(0) 推荐(0)
摘要:数学基础第一弹! 简单的递归题,没有什么可说的。只是要细心细心再细心,不要心浮气躁,急于求成。 1 #include 2 #include 3 4 using namespace std; 5 6 long long int CountTriangle[1000010]; 7 8 int main() 9 {10 int i,j,n;11 12 long long int sum;13 14 CountTriangle[1] = 1;15 CountTriangle[0] = 0;16 17 for(i = 2;i >n)29 ... 阅读全文
posted @ 2013-08-30 20:56 好小孩 阅读(221) 评论(0) 推荐(0)
摘要:寻找串与其逆串的最长公共子序列。 因为此子序列必是回文串,剩下的字符就是需要插入的。 1 #include 2 #include 3 #include 4 #include 5 6 #define Max(a,b) a > b ? a : b 7 8 using namespace std; 9 10 char s1[5010],s2[5010];11 12 short int CountLen[5010][5010];13 14 int main()15 {16 int len;17 while(~scanf("%d",&len))18 {19 ... 阅读全文
posted @ 2013-08-27 15:48 好小孩 阅读(165) 评论(0) 推荐(0)
摘要:简单的DFS。一开始把DFS里面的一个变量弄成 全局变量了,调试了半个小时才发现...... 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int MinStep; 10 11 int map[25][25]; 12 13 int h,w; 14 15 struct Point 16 { 17 int h,w; 18 }sp,ep,np; 19 20 int jh[] = { 0,-1, 1, 0}; 21 int j... 阅读全文
posted @ 2013-08-23 16:05 好小孩 阅读(146) 评论(0) 推荐(0)
摘要:枚举了所有状态 1800+ms过了...... 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int c[25][25];10 11 int MaxSum;12 13 bool MarkSubSet[25];14 15 void dfs(int cur,int ans,int Sum,int n)16 {17 if(cur > n)18 {19 int i,j,sum;20 for(i = 1,sum =... 阅读全文
posted @ 2013-08-23 10:09 好小孩 阅读(157) 评论(0) 推荐(0)
摘要:给出一个Max 和一串数字。将这一串数字分割成若干个数,其和为sum。求最接近但不超过Max的sum。。。 将这个sum及这若干个数输出来。 DFS + 打印路径 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 char SNum[10]; 10 11 struct N 12 { 13 int data,ans,pre; 14 N *l,*r; 15 }*root; 16 17 N *creat() 18 { 1... 阅读全文
posted @ 2013-08-22 19:44 好小孩 阅读(138) 评论(0) 推荐(0)
摘要:在一个区域内,有许多电台,如果覆盖有交集的话可能会互相干扰,唯一的解决方案就是使用不同的频道。 但是频道这种资源非常珍贵,所以应使用尽量少的频道。 感觉是模拟题,不知道为啥放在了搜索里面。Discuss里面有大牛说用四色定理,作为一名离散只考了70+的选手也没有去看......也可能是后台比较水,我的这种方法竟然也是0ms。 解题思路都写在了注释里。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 struct N10 {11 char dat... 阅读全文
posted @ 2013-08-22 10:52 好小孩 阅读(198) 评论(0) 推荐(0)
摘要:数独问题。给定其中的几个数,找出其他符合规则的数。保证所给数据合法。典型的DFS。 又是1A真爽。 首先用三个数组标记每列每行每个九宫格出现过的数字。然后DFS寻找可能的状态。跑了400+ms。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int sudoku[10][10]; 10 11 bool MarkDfs,hr[10][10],hc[10][10],hs[10][10]; 12 13 int JudgeS(int i,i... 阅读全文
posted @ 2013-08-22 09:27 好小孩 阅读(152) 评论(0) 推荐(0)
摘要:题意:有两个杯子 容量分别为 A,B;每次可以将其中一杯杯子倒满或倒空,或者将一个杯子中的水倒入另外一个杯子(必须将其中一个杯子倒空或倒满)。 这样每种状态就有可能衍生出六种新的状态。 典型的BFS。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 int n,m; 11 12 bool sta[110][110]; 13 14 struct Q 15 { 16 int n,m,step,mar... 阅读全文
posted @ 2013-08-21 16:40 好小孩 阅读(171) 评论(0) 推荐(0)
摘要:赤裸裸的模拟题。。 给出字符串 s1,s2,s12;判断s1,s2能够通过题目中所给的规则到达 s12。每次只会产生一种新的状态,还BFS个毛线-- s1的首位新生成的字符串的首,s2的尾为新生成字符串的尾。中间的字符依次交叉排列。 再将新生成的字符串的前一半给s1,后一半给s2。 重复上述两步 直到到达 s12 或者 新生成的字符串已经出现过。 前者输出步数,后者输出 -1。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 struct N1... 阅读全文
posted @ 2013-08-21 16:35 好小孩 阅读(169) 评论(0) 推荐(0)
摘要:简单的RMQ 约等于模板题.....第一次敲 给自己留个参考 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 #define Max(a,b) a > b ? a : b 8 9 using namespace std;10 11 int Num[100010];12 13 int MaxNum[100010][15];14 15 int value[100010],Count[100010],Left[100010],Right[100010];16 17 int divide(int Num,int... 阅读全文
posted @ 2013-08-20 21:21 好小孩 阅读(127) 评论(0) 推荐(0)
摘要:简单的BFS + 素数筛。。。。。手残把素数筛敲错了 调试了大半年......不过终于迎来了久违的 1A 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 bool HashPrime[10010]; 11 bool Mark[10010]; 12 13 struct N 14 { 15 int p,s; 16 }t,nt; 17 18 void bfs(int n,int m) 19 { 20 ... 阅读全文
posted @ 2013-08-20 16:06 好小孩 阅读(201) 评论(0) 推荐(0)
摘要:毫无意义的三维BFS..... 从 S 出发 每次可以选择六个方向 求到 E 的最小移动次数 。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 char maze[31][31][31]; 11 bool MarkMaze[31][31][31]; 12 13 struct P 14 { 15 int l,r,c,step; 16 }sp,ep,tp,np; 17 18 int L,R,C,le... 阅读全文
posted @ 2013-08-20 11:12 好小孩 阅读(151) 评论(0) 推荐(0)
摘要:百年难得一遇的会做的中文题...... 每一次DFS都有两种状态 放或者不放 简单的DFS模板题。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int n,k,sum;10 11 char map[10][10];12 13 bool HashH[10],HashW[10];14 15 void dfs(int h,int w,int kc)16 {17 int i,j;18 19 if(kc == k)20 {21 ... 阅读全文
posted @ 2013-08-20 10:35 好小孩 阅读(234) 评论(0) 推荐(0)
摘要:字典树 或者 map...... map 8000+ ms 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 14 using namespace std;15 16 struct cmp17 {18 bool operator() (pair a, pair b)19 {20 return a > b;21 ... 阅读全文
posted @ 2013-08-19 21:06 好小孩 阅读(168) 评论(0) 推荐(0)
摘要:骑士的旅行。 骑士可以每次走一个‘日’字,就像中国象棋里面的马。 给出一个 p*q 的棋盘,每个格子只能走一次,是否存在一种方法可以遍历整个棋盘。如果有多种方法输出字典序最小的。 关于此题中的字典序: 骑士每一次都会有八个方向可以选择,每一次都选择字典序小的来DFS。这样最终结果就是字典序最小的。 int jp[] = {-1, 1,-2, 2,-2, 2,-1, 1}; int jq[] ={-2,-2,-1,-1, 1, 1, 2, 2}; 此为遍历时确定八个方向的数组。 #include #include #include #include #include #inc... 阅读全文
posted @ 2013-08-19 15:57 好小孩 阅读(191) 评论(0) 推荐(0)
摘要:优先队列水过~~~ 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using namespace std;10 11 int seq[30010];12 13 int main()14 {15 int n,m,i,j,order,top,lastorder;16 17 while(scanf("%d %d",&m,&n) != EOF)18 {19 20 priority_queue q1;21 pr... 阅读全文
posted @ 2013-08-19 10:44 好小孩 阅读(170) 评论(0) 推荐(0)
摘要:给出N个点,判断可以组成多少个正方形。最后输出正方形的个数。 思路:枚举每两个点,计算出另外的两个点,若另外两点存在则正方形存在。 这样得到的结果是最终结果的二倍,因为每一个正方形均累加了两次。 另外两点的计算方法: 设AC和BD的交点O的坐标为(X0,Y0), 则有 X0 = (X1+X3)/2 , Y 0 = (Y1+Y3)/2; 从图上可以看出: X2-X0 = Y3-Y0, Y2-Y0 = X0-X3; 将上述四式合并得: X2 = (X1+X3+Y3-Y1)/2; Y2 = (Y1+Y3+X1-X3)/2; 同理可得: X4 = (X1+X3-Y3+Y1)... 阅读全文
posted @ 2013-08-15 15:36 好小孩 阅读(243) 评论(0) 推荐(0)
摘要:取余,邻接表。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 struct N11 {12 int data,ans;13 N *next;14 }*hash[2000001] = {NULL};15 16 int Max = 0,Max_num;17 18 N *creat()19 {20 N *p = (N *)malloc(sizeof(N));21 p->next = NULL;22 ... 阅读全文
posted @ 2013-08-14 20:05 好小孩 阅读(181) 评论(0) 推荐(0)
摘要:给你N个棍子,每个棍子的两端涂有颜色。两个涂有一种颜色的端点可连在一起。 问这N根棍子是否能连成一条直线。 可以把每个棍子看成一条边,端点为两个节点。则问题转化成所给的这些端点是否连通,若连通是否存在一笔画的问题,即是否存在欧拉回路。 并查集+路径压缩 判断图是否连通。 另在图连通的情况下若不存在度数为奇数的点或有且仅有两个度数为奇数的点,则存在欧拉回路。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int me[51000... 阅读全文
posted @ 2013-08-13 16:49 好小孩 阅读(121) 评论(0) 推荐(0)
摘要:简单的并查集的应用,统计和 0 联通的点的个数,约等于模板题。。。。。。手残没有判断两个点的根节点是否相等。。。。。贡献了五个WA...... 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 int stu[30010],num[30010]; 8 9 int find(int x)10 {11 return stu[x] == x ? x : stu[x] = find(stu[x]);12 }13 14 void merge(int a,int b)15 {16 int fa = f... 阅读全文
posted @ 2013-08-12 15:30 好小孩 阅读(168) 评论(0) 推荐(0)
摘要:特殊的快速排序——归并排序。 给定N个数,求排成升序序列所需要的最小交换次数。每次只能交换相邻的两个数。 作为一名《线性代数》只考了60+的选手竟然一眼就看出要求逆序数有木有,可是我不会求啊有木有,搞来搞去还是要用归并排序啊有木有。 T^T 归并排序的主要思路: 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取... 阅读全文
posted @ 2013-08-12 10:51 好小孩 阅读(206) 评论(0) 推荐(0)
摘要:蓝色牛仔裤? 中规中矩的字符串匹配 唯一的陷阱就是同等长度的子串输出字典序最小的。。。。。 最烂的代码 ……没有之一…… 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using namespace std; 10 11 char s[11][62]; 12 13 bool check(char *s1,char *s2,int st,int l) 14 { 15 16 17 18 int ls2 = strlen(... 阅读全文
posted @ 2013-08-10 22:26 好小孩 阅读(172) 评论(0) 推荐(0)
摘要:题意:有N个球 给出一些轻重关系 排除拓扑序列 若拓扑排序不唯一 则尽量让序号小的轻。输出为该球在拓扑排序中的位置。 解题思路:让入度为零的点进栈,若存在多个入度为零的点,则选取编号最大的。 不会的时候难了一13,会了就感觉水了一13。。。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using namespace std; 10 11 int head[210],edge[210][40010]; 12 13 struct... 阅读全文
posted @ 2013-08-09 16:12 好小孩 阅读(251) 评论(1) 推荐(0)
摘要:【基本概念】:二分图:二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。最大匹配:给定一个二分图G,在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配. 选择这样的边数最大的子集称为图的最大匹配问题,如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹. 阅读全文
posted @ 2013-08-09 10:01 好小孩 阅读(216) 评论(0) 推荐(0)
摘要:题意:一群人在地图上走啊走 每走到一个 ‘S’ 或者 ‘A’ 就可以分开一次 最多分成四个小队(因为只有四个方向可以走),直到找到所有的‘A’,输出能找到所有‘A’的最小的步数。 注意,新的小队的移动次数从0开始计算。 显然,最小生成树算法。每一组相邻的'A'都可以看成是一个整体,这些独立的整体组成了一个图,在这个图上选取一个最小生成树,这颗最小生成树的边的权值之和即为答案。 此题新颖之处在于寻找最短的那条边。一提到最短边显然要用到BFS。 开始的时候以‘s’为BFS的起点出发 找到离它最近的那个‘A’,把这一组‘A’和‘s’看成一个整体,再以这个新的整体为BFS的起点出发,继 阅读全文
posted @ 2013-08-07 09:12 好小孩 阅读(206) 评论(0) 推荐(0)
摘要:首先要强调一点 这不是一道ACM题,这是他妹的一道英语阅读理解。 题意:输入N 代表有N种汽车。每两种汽车之间有一条边,边的权值的定义为 两串字符串之间有几个不同的字母。。。稠密图。。。。普利姆 或者 克鲁斯卡尔 + 路径压缩 我认为后者能通吃所以很无耻的不会第一种。。。。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using namespace std;10 11 char s[2010][10];12 13 struct E14 {15 ... 阅读全文
posted @ 2013-08-06 16:36 好小孩 阅读(289) 评论(0) 推荐(0)
摘要:求最长路中的最短路……略显绕嘴 最长路定义为该条路上青蛙调的最远的那一步。应该算是水题,感觉思路比较新颖,主要是权值的定义。 两种算法 很显然 后一种从效率上明显优于前一种 Floyd 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using namespace std;10 11 float path[210][210];12 13 float Max(float a,float b)14 {15 return a > b ? a : b;16 ... 阅读全文
posted @ 2013-08-05 21:27 好小孩 阅读(215) 评论(0) 推荐(0)
摘要:SPFA 第二次用到 超级源点 这个概念,依稀记得第一次用还是小时候...... 逆向建图,添加超级源的时候是顺向建立。 0号点为超级源。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using namespace std; 10 11 struct N 12 { 13 int g,p,v; 14 N *next; 15 }*head[110]; 16 17 N *creat() 18 { 19 ... 阅读全文
posted @ 2013-08-05 14:51 好小孩 阅读(225) 评论(2) 推荐(0)