摘要: dfs,O(2^16)   阅读全文
posted @ 2011-02-01 14:27 undefined2024 阅读(696) 评论(0) 推荐(0)
摘要: dfs,搜索所有的操作方法,O(2^16)   阅读全文
posted @ 2011-02-01 14:27 undefined2024 阅读(683) 评论(4) 推荐(0)
摘要: 题意:平面上有一些点,现要求用一些圆心在x轴上的圆(雷达)来覆盖这些点,问最少需要多少雷达。分析:我的解法是把点按横坐标排序,然后把每个点的雷达尽量往右放,然后每放一个雷达都要保证雷达左面的岛都被雷达所覆盖。所以我们可以按一个点靠右放完雷达后,再根据后面的在雷达位置左面的点,把雷达向左移。一个雷达经过了移的过程,就一定是能覆盖左面的岛。所以排好序后,只需O(n)。注意:unique函数的返回值是结尾指针,所以可以用被注释掉两行的方法来获得数组长度。标准方法是把每个点的放置雷达的区间求出,然后按照区间排序。排好序后,从左至右看,当发现下一个区间的起始点大于前面所有区间的最小结束点的时候,答案加一 阅读全文
posted @ 2011-02-01 14:26 undefined2024 阅读(4403) 评论(0) 推荐(0)
摘要: 本来想二分,后来发现一个函数就解决了。   阅读全文
posted @ 2011-02-01 14:24 undefined2024 阅读(565) 评论(0) 推荐(0)
摘要: 本题中最多5个命题变项:p,q,r,s,t 每个有0,1两种取值,所以总共32种情况,分别枚举即可。 对于每种情况,计算表达式的值,如果有结果为0的则输出not 难点在于如何计算表达式的值,我们采用递归的方法,把表达式分为一或两个子表达式,并把参数end(本表达式的结束位置)传给上一层,一遍上一层获取第二个子表达式的起始位置。最后通过两个子表达式的结束位置,得到整个表达式的结束位置。 en... 阅读全文
posted @ 2011-02-01 14:23 undefined2024 阅读(1803) 评论(1) 推荐(0)
摘要: 最大的难点在于读题,全年十二个月,有8个连续的五个月,1~5,2~6,…… 确定了s和d,8次报告中每次报告有五种选择(i次s,(5-i)次d,i = 0~4),在这五种情况中必然是选择最优的,即亏损且亏损值最小。假设我们按某种顺序安排好了这五个月哪些是亏,哪些是盈。我们就可以让12个月以此5个月为循环构成。然而想要让d在12个月中出现得尽量少,就必须在安排5个月的时候把s排在前面,d排在后面。... 阅读全文
posted @ 2011-02-01 14:23 undefined2024 阅读(1083) 评论(0) 推荐(0)
摘要: 本题的图与其他题稍有不同,本题以左下角为(0,0)点,列号对应x,行号对应y。 完全模拟即可。   阅读全文
posted @ 2011-02-01 14:22 undefined2024 阅读(356) 评论(0) 推荐(0)
摘要: 本题是简单的模拟,使用双层vector嵌套存储棋子的位置和种类,然后分别对每个vector进行排序 注意:排序方法为sort(piece[i].begin(), piece[i].end(), cmpWhite); 当然,cmpWhite是比较函数,可以不加比较函数,只用用前两个参数。   阅读全文
posted @ 2011-02-01 14:21 undefined2024 阅读(476) 评论(0) 推荐(0)
摘要: 可以认为这是一道简单的字符串处理题,只要把相应的值填入map对应的位置,然后把map输出就行了   阅读全文
posted @ 2011-02-01 14:20 undefined2024 阅读(249) 评论(0) 推荐(0)
摘要: 这一题学到的东西太多了 1.大数组不能开在函数中,要使用全局变量 2.bellman_ford算法 3.c语言中struct不能有构造函数,开数组不能使用const的值作为大小,而要用define. 4.代替vector的建图方法,数组模拟链表法,map[i]存第i个点的第一条边在e中的下标。e用来存边,next记录该点的下一条边的坐标。 5.使用vector的效率极低。 本题只需建正... 阅读全文
posted @ 2011-02-01 14:19 undefined2024 阅读(1403) 评论(0) 推荐(0)
摘要: 错了好多次,原因有,path是双向的,开始没考虑到。边的数组应开到2500*2 + 200。图式不连通的,要把图的各个部分都覆盖到。 本题用spfa算法,判断是否有负权回路。若松弛过程中存在某点的入队次数=n,则说明有,否则没有。 阅读全文
posted @ 2011-02-01 14:18 undefined2024 阅读(2044) 评论(0) 推荐(0)
摘要: 题意:每个人都有一个物品,对应一定的钱数,想要得到此物品可以直接出钱,也可以通过用其他人的物品并添加一些钱来交换,问要得到酋长的物品最少需要多少钱?另外,每个人都有一个等级,要求和你交易的人中不能有任何两人的等级相差m以上。分析:我们可以把本题理解为,我们要买一号物品,而一个物品的一部分价值可以转化为别的物品,我们通过购买别的物品和加钱来购买获得一号物品。所以我们可以把需要加的钱数作为该物品到别的物品的一条边,走过这条边,我们要花一些钱,然后我们只需要购买现在所在结点的物品即可。这样就把问题转化为最短路问题,用dijkstra就可以了。本题还有个等级制度的问题。我们可以每次枚举一个宽为m的等级 阅读全文
posted @ 2011-02-01 14:16 undefined2024 阅读(2867) 评论(2) 推荐(3)
摘要: dijkstra 把存最短距离的数组改为存储frog distance即可   阅读全文
posted @ 2011-02-01 14:15 undefined2024 阅读(289) 评论(0) 推荐(1)
摘要: floyd算法,floyd过后查看每个点传播消息需要的时间,把最小的点输出即可。   阅读全文
posted @ 2011-02-01 14:14 undefined2024 阅读(756) 评论(0) 推荐(0)
摘要: 题意:给定一些货币之间的单向汇率,问一笔钱能否经过若干次对换而增值。分析:根据输入建立有向图,不能使用dijaskra,因为增值的方法不一定是优先选择最小的路径,并不是贪心所能解决的。所以要用以动态规划为基本思想的floyd来做。#include <iostream>#include <string>#include <vector>using namespace std;const int maxn = 31;struct edge{ int x; double l; edge(int xx, double ll):x(xx),l(l... 阅读全文
posted @ 2011-02-01 14:13 undefined2024 阅读(937) 评论(0) 推荐(0)
摘要: 简单题,只要对所有的数字求出cycle number即可   阅读全文
posted @ 2011-02-01 14:00 undefined2024 阅读(685) 评论(0) 推荐(0)
摘要: 水题,排序   阅读全文
posted @ 2011-02-01 13:59 undefined2024 阅读(511) 评论(0) 推荐(0)
摘要: 这是一道简单题,但是我错了n次。 开数组的时候一定要注意范围,不要直接maxn;   阅读全文
posted @ 2011-02-01 13:58 undefined2024 阅读(458) 评论(0) 推荐(0)
摘要: 水题,注意判断是不是整分钟读完,如果不是,去尾进一。   阅读全文
posted @ 2011-02-01 13:58 undefined2024 阅读(329) 评论(0) 推荐(0)
摘要: 赤裸裸的01背包   阅读全文
posted @ 2011-02-01 13:57 undefined2024 阅读(670) 评论(1) 推荐(1)
摘要: 水题, 排序, 贪心     阅读全文
posted @ 2011-02-01 13:56 undefined2024 阅读(331) 评论(0) 推荐(0)
摘要: 水题,求最大值最小值   阅读全文
posted @ 2011-02-01 13:55 undefined2024 阅读(224) 评论(0) 推荐(0)
摘要: 水题,只要排好序后,从大到小每三个取一个,加起来就是答案。   阅读全文
posted @ 2011-02-01 13:54 undefined2024 阅读(221) 评论(0) 推荐(0)
摘要: 排序之后,能与牛i + 1匹配的,一定能与牛i匹配,所以我们弄一个左指针l,从右向左看每一头牛,每次移动左指针,使左指针左面的都是满足的,右面的都是不满足的即可。   阅读全文
posted @ 2011-02-01 13:53 undefined2024 阅读(429) 评论(0) 推荐(0)
摘要: 简单字符串处理,从规定位置pos开始查找,string::find(char *, pos);还要注意replace的用法string::replace(pos, length, char*); 阅读全文
posted @ 2011-02-01 13:53 undefined2024 阅读(265) 评论(0) 推荐(0)
摘要: 水题,进行两次排序即可     阅读全文
posted @ 2011-02-01 13:52 undefined2024 阅读(413) 评论(0) 推荐(0)
摘要: 枚举分界线的位置,不要忘了最左侧的分界线     阅读全文
posted @ 2011-02-01 13:51 undefined2024 阅读(281) 评论(0) 推荐(0)
摘要: 水题 阅读全文
posted @ 2011-02-01 13:49 undefined2024 阅读(202) 评论(0) 推荐(0)
摘要: 水题,没有算法   阅读全文
posted @ 2011-02-01 13:35 undefined2024 阅读(285) 评论(0) 推荐(0)
摘要: 线性筛法可以过   阅读全文
posted @ 2011-02-01 12:56 undefined2024 阅读(323) 评论(0) 推荐(0)
摘要: 字符串水题 阅读全文
posted @ 2011-02-01 12:55 undefined2024 阅读(232) 评论(0) 推荐(0)
摘要: kmp算法 首先,这类题不要用cin,应该用scanf和char[] 其次,overlap是重叠的意思,不是扣圈的意思 阅读全文
posted @ 2011-02-01 12:54 undefined2024 阅读(1200) 评论(0) 推荐(0)
摘要: 网络流的最小割问题,看到分配成两部分的题,就要想到网络流最小割,割值是一部分指向另一部分的边的初始容量的总和,不加上另一部分指向本部分的边的容量。而对于最小割来说,最大流流量就是最小割的容量。而划分方法,就是将最大流后残余网络中s可以走到的点划为s集合,其余点划为t集合,注意,不是可以走到t的点,因为有可能有一条线上的多条边都流满的情况,这种情况下有些点就无法走到t,而且s也走不到它。 阅读全文
posted @ 2011-02-01 12:49 undefined2024 阅读(1527) 评论(0) 推荐(0)
摘要: 字符串处理简单题,注意reverse()的使用,这个函数要包含"algorithm" 阅读全文
posted @ 2011-02-01 12:46 undefined2024 阅读(240) 评论(0) 推荐(0)
摘要: 题意:给定三个矩阵a,b,c,问a×b是否等于c?分析:只需要设置一个列向量x,求a*(b*x),求c*x,看是否相等即可。当然这不能保证正确,x是生成的随机向量,多次生成多次测试即可使错误概率大大减小。#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <ctime>#include <algorithm>using namespace std;const int maxn = 510;long lon 阅读全文
posted @ 2011-02-01 12:45 undefined2024 阅读(714) 评论(0) 推荐(0)
摘要: 树状数组题意:给定一棵树,某些节点上有苹果,多次询问各子树上的节点数,并且在询问的中途随时可能新增和删除苹果。分析:dfs遍历树的同时,对每个点标注时间,每个点有一个开始时间和一个结束时间,把这两个时间当做下标,该点的苹果个数(1或0)填入数组的两个对应位。子树中结点的时间段一定是根节点时间段的子段,所以求子树苹果数,只需求数组某区间的和即可。用树状数组比较快。#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;#d 阅读全文
posted @ 2011-02-01 12:44 undefined2024 阅读(2467) 评论(0) 推荐(0)
摘要: 水题,求平均数#include <stdio.h>int main(){ //freopen("D:\\t.txt", "r", stdin); int n; while (scanf("%d", &n) != EOF && n != 0) { int i; int xmin, xmax, sum; scanf("%d", &xmin); xmax = xmin; sum = xmin; for (i = 1; i < n; i++) { int a; scanf( 阅读全文
posted @ 2011-02-01 12:38 undefined2024 阅读(274) 评论(0) 推荐(0)