Cod sursa(job #198217)
Utilizator | Data | 9 iulie 2008 18:41:38 | |
---|---|---|---|
Problema | Secventa | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.67 kb |
#include <stdio.h>
#include <string.h>
//#include <conio.h>
int pin=0,pf=0,minim,n,i,j,k,poz,min,nr,a[500003],x,y;
char s[1000010];
FILE *f;
void parsare(){
int i,j,x;
fscanf(f,"%d%d\n",&n,&k);
fgets(s,1000010,f);
for(j=0,i=1;i<=n;++j,++i){
if(s[j]=='-'){
for(x=0,j++;s[j]>='0'&&s[j]<='9';++j)
x=x*10+(s[j]-48);
a[i]=x*(-1);
}
else{
for(x=0;s[j]>='0'&&s[j]<='9';++j)
x=x*10+(s[j]-48);
a[i]=x;
}
}
}
int main()
{//FILE *f;
f=fopen("secventa.in","r");
/*fscanf(f,"%d %d",&n,&k);
fgets(mesaj,1000010,f);
fgets(mesaj,1000010,f);
fclose(f);
i=0;j=0;
while (i<strlen(mesaj))
{if (mesaj[i]=='-') {j++;
a[j]=0;
i++;
while ((mesaj[i]>='0')&&(mesaj[i]<='9'))
{a[j]=a[j]*10+(mesaj[i]-'0');
i++;
}
}
else if ((mesaj[i]>='0')&&(mesaj[i]<='9'))
{j++;
while ((mesaj[i]>='0')&&(mesaj[i]<='9'))
{a[j]=a[j]*10+(mesaj[i]-'0');
i++;
}
}
i++;
}
*/
parsare();
/*
for (i=1;i<=n;i++)
printf("%d ",a[i]);
getch();
*/
poz=0;x=y=0;
for (i=1;i<=n;i++)
if (poz==0) if (n-i+1>=k) {x=i;y=i+k-1;
min=a[x];nr=1;
for (j=x+1;j<=y;j++)
if (min==a[j]) nr++;
else if (a[j]<min) {min=a[j];
nr=1;
}
poz=1;
i=y;
if ((pin==0)&&(pf==0)) {pin=x;pf=y;minim=min;}
if (min>minim) {pin=x;pf=y;minim=min;}
}
else i=n+1;
else if (a[i]<min) poz=0;
else if (min==a[i]) {x++;y++;}
else if ((a[x]==min)&&(nr>1)) {nr--;
x++;
y++;
}
else
if (a[x]!=min) {x++;y++;}
else
{x++;
y++;
min=a[x];nr=1;
for (j=x+1;j<=y;j++)
if (min==a[j]) nr++;
else if (a[j]<min) {min=a[j];
nr=1;
}
if (min>minim) {pin=x;pf=y;minim=min;}
}
f=fopen("secventa.out","w");
fprintf(f,"%d %d %d",pin,pf,minim);
fclose(f);
return 0;
}