标签:
问题很简单,在一条直线上,坐标从0开始到1000000;现在有n个石子在这条直线上(同一个位置可能有多个石子)
那么用一个定长为m的杆子去覆盖,请问最多能覆盖多少个石子?
3 2 0 0 1 5 2 0 1 2 4 5
3 3
#include<string.h> #include<stdio.h> #define max(a,b) (a>b?a:b) #define min(a,b) (a>b?b:a) int num[50005],sum[50005],minn,maxn; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int i; memset(num,0,sizeof(num)); memset(sum,0,sizeof(sum)); maxn=-1; minn=50005; for(i=0;i<n;i++) { int a; scanf("%d",&a); minn=min(a,minn); maxn=max(a,maxn); num[a]++; } sum[minn]=num[minn]; for(i=minn+1;i<=maxn;i++) { sum[i]=sum[i-1]+num[i]; } int ans=-1; if(maxn-minn<m) ans=sum[maxn]; for(i=minn+m;i<=maxn;i++) { int temp=sum[i]-sum[i-m-1]; if(temp>ans) ans=temp; } printf("%d\n",ans); } }
标签:
原文地址:http://blog.csdn.net/yu_ch_sh/article/details/44275985