Cod sursa(job #636590)

Utilizator laurionLaurentiu Ion laurion Data 19 noiembrie 2011 21:34:41
Problema Zombie Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 1.3 kb
#include<iostream>
#include<cstdio>
#include<fstream>
using namespace std;
int v[1000000+5];
#define DIM 8192
char ax[DIM+16];
int idx;
inline void cit(int &x)
{
            x=0;
            while(ax[idx]<'0' || ax[idx]>'9')
                        if(++idx==DIM)fread(ax, 1, DIM, stdin), idx=0;
            while(ax[idx]>='0' && ax[idx]<='9')
            {
                        x=x*10+ax[idx]-'0';
                        if(++idx==DIM)fread(ax,1, DIM, stdin),idx=0;
            }
}
int main()
{
    int d,n,k,x=0,t=0,nr=1,sol=0;
    freopen("zombie.in","rt",stdin);
    freopen("zombie.out","wt",stdout);

//    cin>>d>>n>>k;
    cit(d);
    cit(n);
    cit(k);
    //scanf("%d %d %d",&d,&n,&k);
    if(n==1)
    {
//        cout<<"1\n";
        printf("%d\n",sol);
        return 0;
    }
//    cerr<<k;
    for(int i=0;i<n;++i)
        //scanf("%d",&v[i]);
        cit(v[i]);
    for(int i=1;i<n;++i)
    {
        t+=v[i]-v[i-1];
        if(t>=d)
        {
            if(nr<k)
                sol++,t-=v[x+1]-v[x],x++;//+1?
            else
                sol+=k,nr=0,t=0,x=i+1;
        }
        else
            nr++;//,cerr<<"nr="<<nr<<'\n';
    }
    //cerr<<nr<<'\n';
    if(nr>0) {if(nr<k) sol+=nr; else sol+=k;}

//    cout<<sol<<'\n';
    printf("%d\n",sol);
    //cerr<<sol<<'\n';

    return 0;
}