上一页 1 ··· 28 29 30 31 32 33 34 35 36 ··· 66 下一页
摘要: 比赛的时候竟然没有想到这题可以用树状数组过,由于数字的区间比较小,所以直接开设一个树状数组,定义sum(i) 表示小于i的数的总数。那么判定一个数是否有的条件就是计算sum(i+1) == sum(i) 便可以了,查找第K大的数,也就可以直接二分了。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#define MAXN 100000using namespace std;int c[MAXN+5];int lowbit(int x){ r 阅读全文
posted @ 2012-08-12 20:28 沐阳 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 这题可以用二分枚举答案来求解,每次枚举一个答案时我们总是选取满足要求的每个零件的价格最小者,如果金钱能够满足的话就枚举一个更大的质量,这里最好将质量离散化,这样就能枚举每个点都用相应的品质对应。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>#include <map>using namespace std;map<int,int>mp;int fee[1005];struct Node{ char name[25] 阅读全文
posted @ 2012-08-12 20:06 沐阳 阅读(381) 评论(0) 推荐(0) 编辑
摘要: 该题题意是要求给定a,b区间内有多少个数满足二进制表示法内0的数目多余1的数目。详见代码:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int c[40][40];void pre(){ c[0][0] = 1; for (int i = 1; i <= 30; ++i) { c[0][i] = 1; for (int j = 1; j <= 30; ++j) { c[j][i] = c[j][. 阅读全文
posted @ 2012-08-12 10:05 沐阳 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 这题是要求一段区间内的不重复的数字之和。我们通过对询问区间的右端点进行排序,然后记录每一数字的上一次的出现的位置,由于询问都是不回溯的那么就可以线性的更新了。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 50005using namespace std;typedef long long int Int64;int N, M, seq[MAXN], last[1000005];Int64 ans[200005], 阅读全文
posted @ 2012-08-11 11:13 沐阳 阅读(314) 评论(1) 推荐(0) 编辑
摘要: 这题是定义如下的一个数:S(0, 0) = 1; S(n, 0) = 0 for n > 0;S(0, m) = 0 for m > 0;S(n, m) = m S(n - 1, m) + S(n - 1, m - 1), for n, m > 0.也就是题中所说的把一个含有n个元素的集合分成m份,共有多少种分法。现在题目就是要求S(n, m)的奇偶性。如果m是一个偶数的话,那么我们可以推出 S(n, m)Ξ S(n-1, m-1) (mod 2),如果m是一个奇数的话,我们推出S(n, m)Ξ (S(n-1, m) + S(n-1, m-1)) (mod 2)。后面看到某一 阅读全文
posted @ 2012-08-10 23:03 沐阳 阅读(605) 评论(0) 推荐(0) 编辑
摘要: 详见代码:方法一:#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;char s[1005];int len, Mp[25] = {1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2};// 直接计算出其循环节为20这里将0-19的列表于上,当N<5时直接输出,其余需要递归N/5因为这个表是删除了所有的5的倍数的 int slove(){ int ans = 1; while (len) { len -= !s[len-1]; a 阅读全文
posted @ 2012-08-10 11:24 沐阳 阅读(1447) 评论(0) 推荐(0) 编辑
摘要: 这题打表找下规律就可以了,定义一个变量来表示增量,那么这个变量的格律就是 add = (add± 1) * 2手写了大数的类,幸好只有-1这个值,这个类是没定义减法运算的。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;typedef long long int Int64;Int64 rec[65];int N;struct BigInteger 阅读全文
posted @ 2012-08-09 20:34 沐阳 阅读(446) 评论(0) 推荐(0) 编辑
摘要: 这个是参考了别人之后的代码,POJ上0MS过了。Orz......对于一个序列在提取了2,5之后,例如1,2,3,4,5,6,7,8,9,10,我们可以将其中的奇数和偶数分开来对待,对于偶数序列2,4,6,8,10由于原序列会被提取出2,所以就退化成了1,2,3,4,5,这个奇数序列,对于奇数序列1,3,5,7,9我们就可以来统计3,5,7的数量了,同样出现的次数是总长度N=10除以10(单位出现区间)再判定N%10是否大于要求得数,对于这个奇数序列由于5是要被提取的,所以又变成了1这个序列,更多数可能更好看了。如此递归下去便行了。代码如下:#include <cstdlib>#i 阅读全文
posted @ 2012-08-09 11:08 沐阳 阅读(700) 评论(0) 推荐(0) 编辑
摘要: 这题写的真心有点纠结。首先确定需要多少位来容纳这个数,然后找到第一个要更新的位置,再逐位更新。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;typedef long long int Int64;bool hash[20];int digit[10], Most;Int64 s[10], f[20], N;void pre(){ f[0] = s[0] = 阅读全文
posted @ 2012-08-08 22:23 沐阳 阅读(466) 评论(0) 推荐(0) 编辑
摘要: Description某校数据结构课程设计期末考核即将来临。为了考查学生对树结构的认识,同时也检验学生的编程能力,该校将考核的一项内容定为:要求编写程序按编号顺序打印出节点个数不少于m的所有二叉树。编号规则:·仅有一个节点的树编号为1。·当满足以下条件之一时,定义二叉树a的编号比b大:1.a的节点数比b多。2.若a的节点数与b相等,且a的左子树编号比b的左子树大。3.a的节点数和左子树编号都和b相等,且a的右子树编号比b的右子树大。二叉树的节点用大写X表示,例如:当然当m较大时,检验答案对错的工作也是很繁重的,所以教师只打算对其中的若干个编号的二叉树进行抽查,请编制一个程序 阅读全文
posted @ 2012-08-08 15:08 沐阳 阅读(433) 评论(0) 推荐(0) 编辑
上一页 1 ··· 28 29 30 31 32 33 34 35 36 ··· 66 下一页