Cod sursa(job #240695)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 8 ianuarie 2009 10:26:37
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.73 kb
#include<iostream>
#include<stdio.h>
FILE *f=fopen("joc6.in","r"),*g=fopen("joc6.out","w");
unsigned int a[1500],b[1500],m[2004],n,nr;
int main()
{
  fscanf(f,"%d",&n);
  int aux,ina,sfa,inb,sfb,sfm=0;
  fscanf(f,"%d",&aux);
  sfa=sfb=0;
  while(aux)  //citire A
  {
   sfa++;
   a[sfa]=aux;
   fscanf(f,"%d",&aux);
  }
  fscanf(f,"%d",&aux);
  while(aux)  //citire B
  {
   sfb++;
   b[sfb]=aux;
   fscanf(f,"%d",&aux);
  }
  ina=inb=1;
  int t=1,i,t1,t2;
  while(1)
  {
   if(ina>sfa)
   {
    fprintf(g,"A\n");
    for(i=inb;i<=sfb;i++)
     fprintf(g,"%d ",b[i]);
    fprintf(g,"\n");
    for(i=1;i<=sfm;i++)
     fprintf(g,"%d ",m[i]);
    return 0;
   }
   if(inb>sfb)
   {
    for(i=ina;i<=sfa;i++)
     fprintf(g,"%d ",a[i]);
    fprintf(g,"\nB\n");
    for(i=1;i<=sfm;i++)
     fprintf(g,"%d ",m[i]);
    return 0;
   }
   if(nr==n)
   { 
    for(i=ina;i<=sfa;i++)
     fprintf(g,"%d ",a[i]);
    fprintf(g,"\n");
    for(i=inb;i<=sfb;i++)
     fprintf(g,"%d ",b[i]);
    fprintf(g,"\n");
    if(sfm==0)
     fprintf(g,"0");
    else
    for(i=1;i<=sfm;i++)
     fprintf(g,"%d ",m[i]);
    return 0;
   }
   if(t)   //randul lui A
   {
    t=0;
    sfm++;
    m[sfm]=a[ina];
    ina++;
    t1=1;
    for(i=1;i<sfm&&t1;i++)
     if(m[i]==m[sfm])
      t1=0;
    int i2=i-1;
    if(!t1)
    {
     for(i=sfm;i>=i2;i--)
      a[++sfa]=m[i];
     sfm=i2-1;
    }
    nr++;
   }
   else   //randul lui B
   {
    t=1;
    sfm++;
    m[sfm]=b[inb];
    inb++;
    t2=1;
    for(i=1;i<sfm&&t2;i++)
     if(m[i]==m[sfm])
      t2=0;
    int i1=i-1;
    if(!t2)
    {
     for(i=sfm;i>=i1;i--)
      b[++sfb]=m[i];
     sfm=i1-1;
    }
    nr++;
   }
  }
 return 0;
}