上一页 1 2 3 4 5 6 7 8 ··· 66 下一页
摘要: 题意:给定一个数N,求小于等于N的所有数当中,约数最多的一个数,如果存在多个这样的数,输出其中最大的一个。分析:反素数定义:对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0=t2>=t3>=....那题题目相当于求解小于等于N中,最大的反素数。搜索即可。这个搜索的速度是很快的。#include #include #include #include #include #include #include using namespace std;typedef long long LL;LL n;vectorvp;mapmp 阅读全文
posted @ 2013-09-05 20:04 沐阳 阅读(888) 评论(0) 推荐(1) 编辑
摘要: 题意:给定N(1#include #include #include #include using namespace std;typedef unsigned long long LL;const int N = 70;LL f[70][70];// f[i][j]表示将i个盘通过j个柱子从第一根柱子移动到最后一根柱子所需要的最少次数 int path[70][70]; // 表示f[i][j]的得到的最优移动方案是先将最小的path[i][j]个盘移动到某一根柱子上 int n, m;stackstk[70];char ocp[70];void pre() { memset(f, 0... 阅读全文
posted @ 2013-09-04 22:11 沐阳 阅读(1126) 评论(0) 推荐(0) 编辑
摘要: A.The Wall题意:两个人粉刷墙壁,甲从粉刷标号为x,2x,3x...的小块乙粉刷标号为y,2y,3y...的小块问在某个区间内被重复粉刷的小块的个数。分析:求出x和y的最小公倍数,然后做一个一维的区间减法就可以了。#include #include #include #include using namespace std;typedef long long LL;int x, y, a, b;int main() { scanf("%d %d %d %d", &x, &y, &a, &b); int d = __gcd(x, y); 阅读全文
posted @ 2013-09-01 13:14 沐阳 阅读(517) 评论(0) 推荐(0) 编辑
摘要: A.Helpful Maths分析:将读入的字符转化为数字,直接排个序就可以了。#include #include #include #include using namespace std;const int N = 500;int seq[N];int main() { char c; int t = 0, idx = 0; while ((c = getchar()) != EOF) { if (c == '+' || c == '\n') { seq[idx++] = t; t = 0; } ... 阅读全文
posted @ 2013-08-27 13:53 沐阳 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 后缀自动机也是解决字符串问题的常用工具,犀利在O(N)的空间复杂度下存在给定串的后缀以及子串,而且支持在线的操作。POJ-1509Glass Beads题意:求一个字符串的最小表示的开始下标。分析:其实有一个O(N)的算法专门来解决这个问题,并且实现非常简单,不过后缀自动机同样能够解决这个问题。首先把这个串重复两次,然后从前往后一一将字符加入到后缀自动机中,最后从根开始向下遍历串的长度层即可。#include #include #include #include using namespace std;const int N = 10005;char str[N];struct SAM { . 阅读全文
posted @ 2013-08-25 22:06 沐阳 阅读(7050) 评论(3) 推荐(2) 编辑
摘要: 原文地址:http://blog.renren.com/blog/340275217/731966815作者:赵越之前对于cout与printf()混用的结果的认识,源于某年北京赛区某judge的总结。据其称,某队在比赛时某题的输出混用了cout与printf(),结果输出的顺序出错。其把原因归结为一个带缓冲而一个不带缓冲。对此金强提出了置疑,因为stdio.h中定义了像ungetc()这样的函数,其作用是将字符放回到输入流中。可见stdio中也是使用了缓冲的。那么为什么cout与printf()混用会发生问题呢?下面来做一些试验(环境:g++ (GCC) 3.2.3 (mingw speci 阅读全文
posted @ 2013-08-25 21:05 沐阳 阅读(1047) 评论(0) 推荐(0) 编辑
摘要: HDU-4698Counting题意:给定一个二维平面,其中x取值为1-N,y取值为1-M,现给定K个点,问至少包括K个点中的一个的满足要求的共有多少中取值情况。也就是说K个点中至少一个点落在所给定的区间内。解法:正面求解,由于点只有1000个,因此直接暴力离散化之后的x轴坐标,对于y轴则可以通过增加一个一个加入点,使用一个set来维护纵轴有多少种不同的取法。#include #include #include #include #include using namespace std;typedef long long LL;const int N = 1005;const int mod 阅读全文
posted @ 2013-08-23 20:58 沐阳 阅读(795) 评论(3) 推荐(0) 编辑
摘要: HDU-4687 Boke and Tsukkomi题意:给定一个简单图,询问哪些边如果选择的话会使得最大的连边数减少。解法:套用一般图的最大匹配算法(带花树)先算出最大匹配数,然后枚举一条边被选择(注意:如果改变被选择,则两端点相邻的边都应删除),看是否只减少一条匹配边。#include #include #include #include #include using namespace std;const int MAXN = 45;int n, m;int u[150], v[150];struct Graph { bool mat[MAXN + 1][MAXN + 1]; ... 阅读全文
posted @ 2013-08-20 21:54 沐阳 阅读(426) 评论(0) 推荐(0) 编辑
摘要: http://hi.baidu.com/myidea/item/142c5cd45901a51820e25039 阅读全文
posted @ 2013-08-16 21:47 沐阳 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 分块算法主要用于给定序列的区间询问问题,能够以较小的时间代价暴力求解,时间复杂度一般在O(n*n^0.5)。关键在O(1)维护好某一区间在增加或者减少一个边界元素所带来的影响。需要注意的就是在更新的区间的时候要先放大在缩小,否则可能出现当前区间左右边界互换的情况,这个影响某一些题可能没有影响,但是极有可能出错。时间复杂度:先考虑左边界的时间复杂度,由于分成了sqrt(n)块,而同一块中左标移动的范围最多是sqrt(n),那相邻块跳转的情况呢?可以虚拟出每块中有至少一个询问进行思考,那么相邻块之间的移动次数最大为2*sqrt(n)。由于共有Q次询问,因此最终时间复杂度为O(Q*sqrt(n))。 阅读全文
posted @ 2013-08-16 19:44 沐阳 阅读(1889) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 66 下一页