雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 50 下一页

2012年2月5日

摘要: http://www.rqnoj.cn/Problem_62.html 有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌,然后移动。 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。 现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。 例如 N=4,4 堆纸牌数分别为: ① 9 ② 8 ③ 17 ④ 6 移动3次可达到目的: 从 ③ 取 4 张牌放到 ④ (9 8 13 ... 阅读全文

posted @ 2012-02-05 19:24 huhuuu 阅读(391) 评论(0) 推荐(0) 编辑

摘要: 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后,位于中间的数。Sample Input7 45 7 2 4 3 1 6Sample Output4HINT第三个样例解释:{4}, {7,2,4}, {5,7,2,4,3}和{5,7,2,4,3,1,6}N<=100000思路:把小于中位数的数设为-1,大于的为1,等于的为0,ll=1表示该数位置在中位数的左边sum【i】数组记录1到i数的和统计sum[]中为0的数如sum :1(ll) 2(ll) -1(ll) 0 -1 -1 1 0有1个在统计sum位置左右相减为0的数又三 阅读全文

posted @ 2012-02-05 14:47 huhuuu 阅读(907) 评论(0) 推荐(0) 编辑

摘要: N个石子,A和B轮流取,A先。每个人每次最少取一个,最多不超过上一个人的个数的2倍。取到最后一个石子的人胜出,如果A要有必胜策略,第一次他至少要取多少个。找规律发现是一个Fibnaci数列,变下型就AC了View Code #include<stdio.h>long long a[1009];int main(){ long long n,i; while(scanf("%lld",&n)!=EOF) { a[0]=0;a[1]=1; if(n==1){ printf("1\n");continue; } ... 阅读全文

posted @ 2012-02-05 09:36 huhuuu 阅读(475) 评论(0) 推荐(0) 编辑

2012年2月4日

摘要: 先排序42 102 113 203 21在用优先队列,按价值小的优先,day<=s[i].d入队,队列的容量要<=day,如>day,出队View Code #include<stdio.h>#include<algorithm>#include<iostream>#include<queue>using namespace std;struct data{ long long d; long long p;}s[100009];struct data1{ long long d; long long p; data1(data 阅读全文

posted @ 2012-02-04 18:26 huhuuu 阅读(422) 评论(0) 推荐(0) 编辑

摘要: 给出背包的容量W、物品费用,每件物品只能取一次,求装满背包的方案总数以及最优方案总数(使物品总价值最大的方案,这里背包不需要装满)输入描述第一行有一个数k,代表有k组样例,每组样例有n+1行,第一行有两个数n,W,分别代表物品的件数,和背包容量,接下来为n行 每行有两个数,物品的费用c、物品的价值w输出描述每个样例输出一行,包含两个数:装满背包的方案总数以及最优方案总数,中间用空格隔开样例输入11 102 3样例输出0 1装满背包的方案总数简单最优方案总数if(f[j].p<f[j-s[i].c].p+s[i].w) 更新数据if(f[j].p==f[j-s[i].c].p+s[i].w 阅读全文

posted @ 2012-02-04 18:20 huhuuu 阅读(493) 评论(0) 推荐(0) 编辑

摘要: 给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少Sample Input8cabcabcaSample Output3用到了kmp里的next自身匹配View Code #include<stdio.h>#include<math.h>char ss[1000009];int next[1000009];void getnext(char *s,int next[]){ int i,j; i=0;j=-1; next[0]=-1; while(s[i]) { if(j == -1||s[i... 阅读全文

posted @ 2012-02-04 10:40 huhuuu 阅读(981) 评论(0) 推荐(0) 编辑

2012年2月2日

摘要: 首先找规律知道|s(47)-s(74)|<=1|s(47)-s(74)|==0 47474……4或 74747……7|s(47)-s(74)|==1会是4747……47或是7474……74最终由是s(4),s(7)决定View Code #include<stdio.h>#include<math.h>int main(){ int a,b,c,d; while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF) { int i,j; if(abs(c-d)>1) { printf(&q 阅读全文

posted @ 2012-02-02 15:04 huhuuu 阅读(221) 评论(0) 推荐(0) 编辑

2012年1月13日

摘要: 题意:有数字n,m1-m的数字(数字个数无限制)可以组成多少个n完全背包dp[j]=dp[j]+dp[i-j];注意大数,刚开始没有写前导0,WA了一次View Code #include<stdio.h>#include<string.h>const int MOD=100000000;struct data{ int s[9];}dp[1009];data add(data a,data b){ int i=0; data ret; ret.s[i]=(a.s[i]+b.s[i])%MOD; for(i=1;i<9;i++) { ret.s... 阅读全文

posted @ 2012-01-13 14:54 huhuuu 阅读(257) 评论(0) 推荐(0) 编辑

2012年1月12日

摘要: 如输入括号,求解总子串和最长长度为多少,并求解有最长括号几种8(())))))(())最长为4,有C(6,2)=15种;(最后的‘)’,‘)’可以在后面6个里面选2个)显然:16(())))))(())))))输出:8 22532(())))))(())))))(())))))(())))))输出:16 5062514()()()()()()()输出:14 114)()()()))((())输出:10 94)))(输出:0 1总子串和最长长度好算,如何求解它有几种呢开个hash[]如对于(()))))),将可以匹配的'('写为1,‘)’写为2,不能匹配的写为0112200002 阅读全文

posted @ 2012-01-12 20:44 huhuuu 阅读(429) 评论(0) 推荐(0) 编辑

2012年1月11日

摘要: http://blog.csdn.net/swm8023/article/details/6525980比较好的资料求C(10,3,107)第一步: 10/3第二步: *9/2第三步:*8/1如第一步里会出现除不下时的情况,用中国剩余定理做View Code #include<stdio.h>long long min(long long a,long long b){ if(a>b)return b; else return a;}long long ext_gcd(long long a,long long b,long long &x,long long &am 阅读全文

posted @ 2012-01-11 14:38 huhuuu 阅读(604) 评论(0) 推荐(0) 编辑

上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 50 下一页