2298: [HAOI2011]problem a
3124: [Sdoi2013]直径

2600: [Ioi2011]ricehub

高橋直樹 posted @ 2013年4月02日 08:44 in BZOJ with tags bzoj IOI , 1138 阅读

http://www.lydsy.com/JudgeOnline/problem.php?id=2600

RunID User Problem Result Memory Time Language Code_Length Submit_Time
382037 Liu_Ts 2600 Accepted 1976 kb 484 ms C++ 541 B 2013-04-02 07:54:49

 

题意

n片稻田,分别位于x[i],建一个谷仓,使得总代价不大于b的情况下,控制的稻田最多,总代价定义为所有稻田到谷仓的距离和。

题解

IOI最弱题。

1.对于选出的稻田集合S,建在他们的中位数的位置最优

2.显然选连续的稻田更优,此时cost可以前缀和O(1)

3.所以O(n)扫过去就可以了

 

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=100001;
int a[N],l,r,ans;
long long s[N],b;
long long cost(int l,int r)
{
	int m=l+r>>1;
	long long tmp=(m-l+1)*a[m]-(s[m]-s[l-1])+(s[r]-s[m])-(r-m)*a[m];
	return tmp;
}
int main()
{
	scanf("%d%d%lld",&r,&l,&b);
	for(int i=1;i<=r;i++)
		scanf("%d",a+i),s[i]=s[i-1]+a[i];
	for(int i=1,j=1;j<=r;j++)
	{
		while(cost(i,j)>b) i++;
		ans=max(ans,j-i+1);
	}
	printf("%d\n",ans);
}

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter