比赛 假期找点事儿做题吧 评测结果 AAAAAAAAAA
题目名称 过河 最终得分 100
用户昵称 CSU_Turkey 运行时间 0.290 s
代码语言 C++ 内存使用 84.24 MiB
提交时间 2017-06-08 00:18:45
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long s,t,m,a[105],l,ans,f[1000000],book[10000000];
int main()
{
	freopen("river.in","r",stdin);
	freopen("river.out","w",stdout);
	scanf("%lld",&l);
	scanf("%lld%lld%lld",&s,&t,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%lld",&a[i]);
	}
	sort(a+1,a+m+1);
	a[m+1]=l;
	for(int i=1;i<=m+1;i++)
	if(a[i]-a[i-1]>2520)a[i]=a[i-1]+(a[i]-a[i-1])%2520;//1-10的最小公倍数 
	if(s!=t)
{
//		int f[a[m+1]+10],book[a[m+1]+10];
	memset(f,0x7f,sizeof(f));
	memset(book,0,sizeof(book));
	for(int i=1;i<=m;i++)
	book[a[i]]=1;
	for(int i=s;i<=t;i++)
	if(book[i]!=1)f[i]=0;
//	else f[i]=1;
	for(int i=2*s;i<=a[m+1];i++)
	{
	for(int j=s;j<=t;j++)
	if(j<=i)f[i]=min(f[i],f[i-j]);
	if(book[i])f[i]++;
}
cout<<f[a[m+1]];
}
else
{
	for(int i=1;i<=m;i++)
	if(a[i]%s==0)ans++;
	cout<<ans;
}
	return 0;
}