- 博客(73)
- 收藏
- 关注
原创 POJ 2886 Who Gets the Most Candies? 线段树。。还有方向感
这道题不仅仅是在考察线段树,还他妹的在考察一个人的方向感。。。。和线段树有关的那几个函数写了一遍就对了,连改都没改,一直在转圈的问题的出错。。。。题意:从第K个同学开始,若K的数字为正 则往右转,否则往左转,转到的那同学出圈,知道剩下最后一个人。 输出得到蛋糕最多的人的名字和块数。线段树的节点中存的是这一段内还有几个人没有跳出,思路很简单,详见注释。#include
2013-09-30 20:52:28 857
原创 POJ 2777 Count Color 线段树
线段树的模板题。#include #include #include #include #include #include using namespace std;struct N{ int l,r,col; bool MarkVisit;} st[400100];void init(int l,int r,int site){ st[s
2013-09-30 16:33:00 776
原创 POJ 2528 Mayor's posters 简单的线段树 + 离散化
在一个被分成 10000000 段的墙上贴海报,从第Li段 贴到 第Ri段。 问最后能看见几张海报。 如果直接建立线段树注定要各种 LE。但是只会有1W张海报,所以对其离散化,这样只有2W+个点。 还有一种特殊情况就是原本不会被完全覆盖掉的海报会因离散化而被完全覆盖。 如:3 1 10 1 67 10和
2013-09-29 11:32:10 643
原创 ZOJ Goldbach 2013年长沙赛区网络赛
迟到了一天的AC。。。。思路:先把单个素数 或着 两个素数能组成的情况预处理一下,然后对于给出的 n,拿第三个素数去和两个素数的情况匹配,最后要注意去重。详情见代码。因为手残少敲了一个 else ,Debug了一晚上。。。#include #include #include #include using namespace std;const long l
2013-09-24 20:21:05 2058
原创 ZOJ Candies 2013年长沙赛区网络赛
设人数为 n。当 n%3 != 2 时,每三个人里面可以确定两个人。当 n%3 == 2 时,每三个人里面只可以确定一个人。此时需要就需要枚举了,详见代码。#include #include #include #include using namespace std;int a[100020] = {0};int s[100020] = {0};int t[10002
2013-09-23 15:41:38 1058
原创 POJ 3273 Monthly Expense
简单的二分题目。第一次做感觉这种思考方法很是新颖。既然是二分 就肯定要找出 上界 和 下界 然后不断取中间状态 寻找最优解。此题,上界显然是所有数的和,下界是数据中的最大值。按照 mid = (low+high)/2 去划分。若 #include #include #define LL long long#define Max(a,b) ( (a) >
2013-09-21 09:22:34 707
原创 HDU 4714 Tree2Cycle
简单的DFS 有些大神有树形DP做的,效率要高很多。 若degree[i] > 2 ,则断开 i 与其父节点之间的边 和 degree[i] - 3 个子节点之间的边,其父节点 度 减一。 此时总消费增加 sum += (degree[i] - 2)*2; 1 #include 2 #include 3 #include 4 #include
2013-09-18 15:22:30 758
原创 HDU 1009 The Shortest Path in Nya Graph
迪杰斯特拉 + 优先队列 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 #define LL __int64 10 11 const LL INF = 2000000000; 12
2013-09-18 15:22:27 753
原创 POJ 1942 Paths on a Grid 组合数的优化
模板题。 数据范围较大时: 1 double cal(double x, double y) 2 { 3 double i, j, sum = 1; 4 if(y > (x/2)) 5 y = x - y; 6 7 for(i = x, j = 1; i > x-y; i--, j++) 8
2013-09-18 15:22:25 698
原创 POJ 1850 Code
早晨有点迷糊,读错题WA了一次,然后又CE了一次..... 给出一个字符串 均为小写字母 且 长度 若给出的字符串可编码则输出对应数字,否则输出0. 可编码的要求为:字母的字典许从左到右一次增大。 设len为字符串长度,i 为对应字母,f[][] 为 长度为len 首字母为 i 是 的情况 ,则有: 当 len = 1 时 f[1][i] = 1; 当
2013-09-18 15:22:23 635
原创 POJ 3252 Round Numbers
简单的组合数学。 题意:给出两个数,找出这两个数之间的Round Numbers。范围包括这两个数。 所谓的Round Numbers就是将给出的十进制数转化成二进制之后,0的个数 >= 1的个数。 思路: 设给出的数为m,其二进制长度为len。 先找出长度小于 len 的情况,这一种情况比较简单。 另一种就是寻找和 m 的长度相同且 从高位到地位枚举m
2013-09-18 15:22:21 712
原创 UVa11401 Triangle Counting
设三角形三边为a,b,c, c 为最大边。 当c == n时,有 a的取值范围为[2,n-1]. b的取值范围为[n-a+1,n-1]; 共有 sum = n*n - 3*n +2 种情况。但是其中又不符合题意的情况,即 a == b 且 每种符合题意的三角形均被计算了两次。 a == b 的情况 只有当 a 的取值大于 n/2 时才会存在,即总共有 s = n/2
2013-09-18 15:22:18 723
原创 HDU 1722 Cake
这道题有一个简单的思路 就是 a+b-gcd(a,b); 另一种就是就是递归求解。 (1) 当Max == Min时,显然蛋糕要均匀的要分成Max(Min)份。 (2)当 Max != Min 时,设m = Max/gcd(Max,Min)*Min; 此时应该将蛋糕的 (Min*Min)/m 部分分成 Min份,即每份Min/m = Min*Min*gcd(
2013-09-18 15:22:16 685
原创 poj 2773 Happy 2006
简单的欧几里得函数应用。 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
2013-09-18 15:22:14 705
原创 HDU 1396 Counting Triangles
数学基础第一弹! 简单的递归题,没有什么可说的。只是要细心细心再细心,不要心浮气躁,急于求成。 1 #include 2 #include 3 4 using namespace std; 5 6 long long int CountTriangle[1000010]; 7 8 int main() 9 {10 in
2013-09-18 15:22:11 864
原创 POJ 1159 Palindrome
寻找串与其逆串的最长公共子序列。 因为此子序列必是回文串,剩下的字符就是需要插入的。 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[501
2013-09-18 15:22:09 682
原创 POJ 3009 Curling 2.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 m
2013-09-18 15:22:07 661
原创 POJ 2531 Network Saboteur
枚举了所有状态 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 MarkSubSe
2013-09-18 15:22:05 708
原创 POJ 1416 Shredding Company
给出一个Max 和一串数字。将这一串数字分割成若干个数,其和为sum。求最接近但不超过Max的sum。。。 将这个sum及这若干个数输出来。 DFS + 打印路径 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace st
2013-09-18 15:22:02 662
原创 POJ 1129 Channel Allocation
在一个区域内,有许多电台,如果覆盖有交集的话可能会互相干扰,唯一的解决方案就是使用不同的频道。 但是频道这种资源非常珍贵,所以应使用尽量少的频道。 感觉是模拟题,不知道为啥放在了搜索里面。Discuss里面有大牛说用四色定理,作为一名离散只考了70+的选手也没有去看......也可能是后台比较水,我的这种方法竟然也是0ms。 解题思路都写在了注释里。 1 #include
2013-09-18 15:22:00 736
原创 POJ 2676 sudoku
数独问题。给定其中的几个数,找出其他符合规则的数。保证所给数据合法。典型的DFS。 又是1A真爽。 首先用三个数组标记每列每行每个九宫格出现过的数字。然后DFS寻找可能的状态。跑了400+ms。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using names
2013-09-18 15:21:58 901
原创 POJ 3414 Pots
题意:有两个杯子 容量分别为 A,B;每次可以将其中一杯杯子倒满或倒空,或者将一个杯子中的水倒入另外一个杯子(必须将其中一个杯子倒空或倒满)。 这样每种状态就有可能衍生出六种新的状态。 典型的BFS。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #incl
2013-09-18 15:21:55 688
原创 POJ 3087 Shuffle'm Up
赤裸裸的模拟题。。 给出字符串 s1,s2,s12;判断s1,s2能够通过题目中所给的规则到达 s12。每次只会产生一种新的状态,还BFS个毛线-- s1的首位新生成的字符串的首,s2的尾为新生成字符串的尾。中间的字符依次交叉排列。 再将新生成的字符串的前一半给s1,后一半给s2。 重复上述两步 直到到达 s12 或者 新生成的字符串已经出现过。 前者输出步数,后者输
2013-09-18 15:21:53 643
原创 POJ 3126 Prime Path
简单的BFS + 素数筛。。。。。手残把素数筛敲错了 调试了大半年......不过终于迎来了久违的 1A 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 bool Ha
2013-09-18 15:21:48 600
原创 POJ 2251 Dungeon Master
毫无意义的三维BFS..... 从 S 出发 每次可以选择六个方向 求到 E 的最小移动次数 。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 char maze
2013-09-18 15:21:46 634
原创 POJ 1321 棋盘问题
百年难得一遇的会做的中文题...... 每一次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[1
2013-09-18 15:21:43 619
原创 POJ 2418 Hardwood Species
字典树 或者 map...... map 8000+ ms 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include string>10 #include 11 #inclu
2013-09-18 15:21:41 742
原创 POJ 2488 A Knight's Journey
骑士的旅行。 骑士可以每次走一个‘日’字,就像中国象棋里面的马。 给出一个 p*q 的棋盘,每个格子只能走一次,是否存在一种方法可以遍历整个棋盘。如果有多种方法输出字典序最小的。 关于此题中的字典序: 骑士每一次都会有八个方向可以选择,每一次都选择字典序小的来DFS。这样最终结果就是字典序最小的。 int jp[] = {-1, 1,-2, 2,-2, 2,-1, 1
2013-09-18 15:21:38 746
原创 POJ 1442 Black Box
优先队列水过~~~ 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
2013-09-18 15:21:36 784
原创 POJ 2002 Squares
给出N个点,判断可以组成多少个正方形。最后输出正方形的个数。 思路:枚举每两个点,计算出另外的两个点,若另外两点存在则正方形存在。 这样得到的结果是最终结果的二倍,因为每一个正方形均累加了两次。 另外两点的计算方法: 设AC和BD的交点O的坐标为(X0,Y0), 则有 X0 = (X1+X3)/2 , Y 0 = (Y1+Y3)/2; 从图上可以看出: X
2013-09-18 15:21:33 762
原创 SDUT 1480 数据结构试验: 哈希表
取余,邻接表。 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 }*h
2013-09-18 15:21:31 945
原创 POJ 2513 Colored Sticks
给你N个棍子,每个棍子的两端涂有颜色。两个涂有一种颜色的端点可连在一起。 问这N根棍子是否能连成一条直线。 可以把每个棍子看成一条边,端点为两个节点。则问题转化成所给的这些端点是否连通,若连通是否存在一笔画的问题,即是否存在欧拉回路。 并查集+路径压缩 判断图是否连通。 另在图连通的情况下若不存在度数为奇数的点或有且仅有两个度数为奇数的点,则存在欧拉回路。
2013-09-18 15:21:28 579
原创 POJ 1611 The Suspects
简单的并查集的应用,统计和 0 联通的点的个数,约等于模板题。。。。。。手残没有判断两个点的根节点是否相等。。。。。贡献了五个WA...... 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 int stu[30010],num[30010]; 8 9 int fin
2013-09-18 15:21:26 641
原创 POJ 2299 Ultra-QuickSort
特殊的快速排序——归并排序。 给定N个数,求排成升序序列所需要的最小交换次数。每次只能交换相邻的两个数。 作为一名《线性代数》只考了60+的选手竟然一眼就看出要求逆序数有木有,可是我不会求啊有木有,搞来搞去还是要用归并排序啊有木有。 T^T 归并排序的主要思路: 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer
2013-09-18 15:21:23 684
原创 POJ3080 Blue Jeans
蓝色牛仔裤? 中规中矩的字符串匹配 唯一的陷阱就是同等长度的子串输出字典序最小的。。。。。 最烂的代码 ……没有之一…… 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using na
2013-09-18 15:21:21 580
原创 POJ 3687 Labeling Balls
题意:有N个球 给出一些轻重关系 排除拓扑序列 若拓扑排序不唯一 则尽量让序号小的轻。输出为该球在拓扑排序中的位置。 解题思路:让入度为零的点进栈,若存在多个入度为零的点,则选取编号最大的。 不会的时候难了一13,会了就感觉水了一13。。。。 1 #include 2 #include 3 #include 4 #include
2013-09-18 15:21:18 729
原创 POJ 3041 Asteroids
【基本概念】:二分图:二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。最大匹配:给定一个二分图G
2013-09-18 15:21:16 608
原创 POJ 3026 Borg Maze 普利姆 + BFS
题意:一群人在地图上走啊走 每走到一个 ‘S’ 或者 ‘A’ 就可以分开一次 最多分成四个小队(因为只有四个方向可以走),直到找到所有的‘A’,输出能找到所有‘A’的最小的步数。 注意,新的小队的移动次数从0开始计算。 显然,最小生成树算法。每一组相邻的'A'都可以看成是一个整体,这些独立的整体组成了一个图,在这个图上选取一个最小生成树,这颗最小生成树的边的权值之和即为答案。
2013-09-18 15:21:13 581
原创 POJ1789 Truck History 最小生成树 + 路径压缩
首先要强调一点 这不是一道ACM题,这是他妹的一道英语阅读理解。 题意:输入N 代表有N种汽车。每两种汽车之间有一条边,边的权值的定义为 两串字符串之间有几个不同的字母。。。稠密图。。。。普利姆 或者 克鲁斯卡尔 + 路径压缩 我认为后者能通吃所以很无耻的不会第一种。。。。。 1 #include 2 #include 3 #include 4
2013-09-18 15:21:11 662
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人