Cod sursa(job #198216)

Utilizator alex23alexandru andronache alex23 Data 9 iulie 2008 18:32:09
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.13 kb
#include <stdio.h>
#include <string.h>


int pin=0,pf=0,minim,n,i,j,k,poz,min,nr,a[500003],x,y;
char mesaj[1000010];

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++;
     }

  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;
  }