上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 66 下一页
摘要: 题意:给定一个N(1-200),求一个不超过100位的十进制的数,且这个数字只由0和1组成,要求输出一个这样的数。解法:直接用long long递归处理即可。代码如下:#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>#include <map>#include <queue>#includ 阅读全文
posted @ 2012-10-19 22:19 沐阳 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个N*M的矩阵(注意N和M的关系),其中0,1,2,3分别代表了不同的意义,现在一个小球从2出发,要到3那个点去,问最少的滚动次数是多少?小球的滚动遵循以下规则,初始位置视为静止状态,只要在静止状态,那么小球可能选择上下左右四个方向相邻没有1(且没有超出整个棋盘的边界)的位置进行移动,一旦选择一个方向,那么就暂时不能够更改方向,直到有一个1挡住了小球。当小球碰撞到了1,那么1变成0,小球又变成了静止态。解法:每个状态我们记录被碰撞过点点,这样就能够检测小球碰到1时是否在这条路径中已经被碰撞过。保留状态bfs即可。代码如下:#include <cstdlib>#inclu 阅读全文
posted @ 2012-10-18 22:14 沐阳 阅读(1946) 评论(1) 推荐(0) 编辑
摘要: 题意:有K个挤奶站,C头奶牛,每个挤奶站每天最多只能够为M头奶牛服务,奶牛到奶牛,奶牛到挤奶站都有一个距离,问一天能够为所有的奶牛都挤奶的匹配方案中,选择最远的距离最小方案。解法:通过二分枚举来构建边的关系,然后用网络流求解是否所有的牛在满足条件的情况下是否都能够被挤奶。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#define inf 0x3fffffffusing namespace std;int K, C, M, idx;int 阅读全文
posted @ 2012-10-17 22:46 沐阳 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 这题给定一个N,求最小的x^2满足y^2 = x^2 + N;将x^2移到左边,得到(y+x)*(y-x) = N,于是我们分解N成两个约数相乘的形式,于是我们从sqrt(N)到1开始枚举约数,得到可以相除的约数对(a, b)后,直接计算abs((a-b) / 2)就是x的值了,当然x不能为零,并且a,b的奇偶性要一致。代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue&g 阅读全文
posted @ 2012-10-12 19:59 沐阳 阅读(353) 评论(0) 推荐(0) 编辑
摘要: #include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;int gcd(int a, int b) { return b ? gcd(b, a % b) : a;}int main() { int a, b; while (scanf("%d %d", &a, &b) == 2) { printf("%d + %d = %d 阅读全文
posted @ 2012-10-12 09:09 沐阳 阅读(95) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/ambition/archive/2011/04/06/bit_rmq.html代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>#include<s 阅读全文
posted @ 2012-10-06 22:36 沐阳 阅读(1324) 评论(0) 推荐(0) 编辑
摘要: 给定N组数字,要求对当前给定的一串数字进行一次错排,在这些错排中有一组最大值,求这组最大值的最小的错排方式。一般的写法是左边的序列从小到大进行排序,右边从大到小进行排序,然后进行组合,这样的一组排列时最优的排列。因为任意交换这样一个序列的元素相对位置必定会使得配对值不平均。但是如果简简单单是这样来做的话肯定是会超时的,我们就注意到左边和右边的值是1-100之间的值,因此我们用一个数组来记录1-100的个数即可,这样就不用每次来排序并且一一计算了。代码如下:#include <iostream>#include <cstdio>#include <cstdlib&g 阅读全文
posted @ 2012-10-05 20:43 沐阳 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 该题建立一个一维的坐标,给定N,M分别表示有N个接收器,M个房子(坐标分别是1,2,3...M),每个接收器能够接受来自左边和右边的一个通话,下面跟着N行,分别表示每个接收器的属性,两个参数,首先是这个接收器的位置,给定为a的话,那么其位置就是位于a和a+1之间,第二个参数就是来自左右有多少个通话。我们定义一个贪心规则即是:只考虑到左边发射出去的线,对于每个接收器(a, b)就把问题转化为在坐标小于等于a的地方有b条线段存在,如果左边剩下的线段条数没有b条的话,那么增加至b条,否则则属于线段过多,应该马上连接x-b条线段,这样多出来的线段就不会穿越这个位置的接收器了。代码如下:#include 阅读全文
posted @ 2012-10-05 19:23 沐阳 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 这题要处理的地方的就是一个人可以同时向多个人传递消息,也就是说一条消息的传递时间由最长的那一条路径所决定,因为可以同时进行嘛,所以就求某一点到所有点的最短路,然后再寻找一条最长的路劲,枚举每个顶点作为起点就可以了。代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cs 阅读全文
posted @ 2012-09-27 10:55 沐阳 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 给定一些关系,求这样的一个划分,满足以下几点:1、每个组合至少有一个成员;2、每个人只能属于一个组;2、每个组内的成员必须相互认识;3、两个组的成员个数要尽可能的接近。首先由必须两两认识我们可以将有向图转化为无向图,之后,我们如果直接对这个图求连通分量的话,有以下结论,如果连通分量的个数为2的话,那么直接可以划分了,如果超过两个的话那么肯定就是没有结果,也就是无法进行分组。最难处理的就是所有点的连通的话,那么如何去做一个划分呢,这个就和割点有关系了,分离一个割点会产生多个连通分量,这要必须保证那些多出来的要再同一个集合内,这样这个问题就很复杂了。简单的做法是建立一个反图,再对这个反图求一次连通 阅读全文
posted @ 2012-09-24 22:29 沐阳 阅读(510) 评论(0) 推荐(0) 编辑
上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 66 下一页