比赛 |
假期找点事儿做题吧 |
评测结果 |
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;
}