Pagini recente » Cod sursa (job #2769757) | Cod sursa (job #2815585) | Cod sursa (job #2449354) | Cod sursa (job #1116503) | Cod sursa (job #638236)
Cod sursa(job #638236)
#include<stdio.h>
#include<ctype.h>
#define MaxN 1000100
#define ll long long
int N,D,K,A[MaxN];
ll B[MaxN];
char S[20*MaxN];
void citire(void)
{
int i;
FILE *f = fopen("zombie.in","r");
fscanf(f,"%d %d %d",&D,&N,&K);
fgets(S,sizeof(S),f);
for(int j=0;S[j];j++)
if(isdigit(S[j]))
{
i ++;
while(isdigit(S[j])) A[i] = A[i]*10 + S[j++]-'0';
}
fclose(f);
}
int binary_search(int li,int ls,int a)
{
if(li <= ls)
if(A[(li+ls)/2] == a)
return (li+ls)/2-1;
else if(A[(li+ls)/2] > a)
return binary_search(li,(li+ls)/2-1,a);
else
return binary_search((li+ls)/2+1,ls,a);
return ls;
}
ll min(ll a,ll b)
{
return a < b ? a:b;
}
int zombie(void)
{
for(int i=1;i<=N;i++)
B[i] = min(B[i-1]+1,B[binary_search(1,i-1,A[i]-D)]+K);
}
int main()
{
FILE *g = fopen("zombie.out","w");
citire();
zombie();
fprintf(g,"%d ",B[N]);
fclose(g);
return 0;
}