记录编号 83977 评测结果 AAAAAAAAAA
题目名称 [NOIP 2005]过河 最终得分 100
用户昵称 GravatarFrost 是否通过 通过
代码语言 C++ 运行时间 0.004 s
提交时间 2013-12-08 17:03:53 内存使用 0.32 MiB
显示代码纯文本
#include<iostream>
#include<fstream>
#include<cstring>
#include<algorithm>
using namespace std;
int  main()
{
	ifstream in("river.in");
	ofstream out("river.out");
	long long l,n,s,t;
	in>>l;
	in>>s>>t>>n;
	long long a[n+1];
	memset(a,0,sizeof(a));
	for(long long i=1;i<=n;++i)
	{
		in>>a[i];
	}
	if(s==t)
	{
		long long ans=0;
		for(long i=1;i<=n;++i)
		{
			if(a[i]%t==0)
			{
				ans++;
			}
		}
		out<<ans<<endl;
		return 0;
	}
	sort(a+1,a+n+1);
	long long f[20],x=1,now=0,tot=0;
	memset(f,0,sizeof(f));
	for(long long i=1;i<l+t;++i)
	{
		for(long j=s;j<=t;++j)
		{
			f[i%t]=min(f[i%t],f[(i-j+t)%t]);

		}	
		if(a[x]==i)
		{
			f[i%t]+=1;
			x+=1;
		}
		if (now==f[i%t])
        {
            tot++;
        }
        else
        {
            now=f[i%t];
            tot=0;
        }
        if (tot==t)
        {
            i+=(min(a[x]-t,l)-i)/t*t;
        }
	}
	long long ans=1000000000;
	for(int i=0;i<t;++i)
	{
		ans=min(ans,f[i]);
	}
	if(ans==0)
	{
		ans+=1;
	}
	out<<ans;
	return 0;
}