比赛 假期找点事儿做题吧 评测结果 AWAAAAAAWA
题目名称 过河 最终得分 80
用户昵称 玉带林中挂 运行时间 0.018 s
代码语言 C++ 内存使用 1.34 MiB
提交时间 2017-06-09 19:08:38
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int min(int a,int b)
{
	cin>>a>>b;
	return a<b? a:b;
}
int main()
{
	freopen("river.in","r",stdin);freopen("river.out","w",stdout);
	int l,s,t,m;
	/*
	L 表示独木桥的长度
	S,T,M分别表示青蛙一次跳跃的最小距离,最大距离及桥上石子的个数
	*/
	int a[100000],f[100000],sz[100000];//sz 代表石子 ;a数组表示M 个石子在数轴上的位置 ; 
	memset(sz,0,sizeof(sz));
	memset(a,0,sizeof(a));
	memset(f,127,sizeof(f));
	cin>>l>>s>>t>>m;
	for(int i=1;i<=m;i++)
   	cin>>a[i];    
	sort(a,a+m+1);
	a[m+1]=l;
	for(int i=0;i<=m;i++)
		if(a[i+1]-a[i]>100)
		a[i+1]=a[i]+(a[i+1]-a[i])%100;//避免超时 
	for(int i=1;i<=m;i++)
		sz[a[i]]=1;
	for(int i=s;i<=t;i++)
	{
		if(sz[i]!=0)	
		f[i]=1;
		else f[i]=0;
	}
	for(int i=2*s;i<=a[m+1];i++)
   {
   		for(int j=s;j<=t;j++)
  	  	 {
      		 if(j>i) break;
    		 f[i]=min(f[i-j],f[i]);
	   	 }
	   if(sz[i]!=0)f[i]++;
	} 
	cout<<f[a[m+1]]<<endl;
	fclose(stdin);fclose(stdout);
	return 0;
}