雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2012年2月5日

摘要: 有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。不是圈的话,就像平分纸牌,加了个圈的话假设平均数是x,且a1给an了k个(k<0说明是an给a1了k个),那么总代价就可以算出来:令si=sum(a1..i)-ix,则总代价=sum|si-k|。易知k为中位数时此值最小。问题转化为求中位数……View Code #include<stdio.h>#include<iostream>#include<algorithm>#include<math.h>using namespace std;in 阅读全文

posted @ 2012-02-05 20:59 huhuuu 阅读(1701) 评论(0) 推荐(1) 编辑

摘要: 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) 编辑