记录编号 |
83977 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2005]过河 |
最终得分 |
100 |
用户昵称 |
Frost |
是否通过 |
通过 |
代码语言 |
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;
}