Cod sursa(job #667993)

Utilizator galbenugalbenu dorin galbenu Data 24 ianuarie 2012 05:48:23
Problema Ecuatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.23 kb
#include<iostream>
#include<fstream>
#include<cstring>
#define lmax 10000
using namespace std;
ifstream f("ecuatie.in",fstream::in);
ofstream g("ecuatie.out",fstream::out);
short int va[lmax],vc[lmax];
short int A,B,C,i,K,divi,rest,nra=-1,lolz;
void read()
{
    f>>A>>B>>C>>K;
     if(A<0)
     {
         for(i=A;i<=-1;i++)
          {if(A%i==0)
           va[++va[0]]=i;
          // cout<<i<<"\n";
          }
     }
     else
     {
         for(i=A;i>=1;i--)
          if(A%i==0)
          va[++va[0]]=i;
     }
     if(C<0)
     {
         for(i=C;i<=-1;i++)
          if(C%i==0)
           vc[++vc[0]]=i;
     }
     else
     {
         for(i=C;i>=1;i--)
          if(C%i==0)
          vc[++vc[0]]=i;
     }
}
void show_a()
{
    short int i;
    if(A<0)
    {
        for(i=1;i<=va[0];i++)
        cout<<va[i]<<" ";
        for(i=va[0];i>=1;i--)
        cout<<-va[i]<<" ";
        cout<<"\n\n";
    }
    else
    {
        for(i=1;i<=va[0];i++)
        cout<<-va[i]<<" ";
        for(i=va[0];i>=1;i--)
        cout<<va[i]<<" ";
        cout<<"\n\n";
    }
}
void show_c()
{
    short int i;
    if(C<0)
    {
        for(i=1;i<=vc[0];i++)
        cout<<vc[i]<<" ";
        for(i=vc[0];i>=1;i--)
        cout<<-vc[i]<<" ";
        cout<<"\n\n";
    }
    else
    {
        for(i=1;i<=vc[0];i++)
        cout<<-vc[i]<<" ";
        for(i=vc[0];i>=1;i--)
        cout<<vc[i]<<" ";
        cout<<"\n\n";
    }
}
void solve()
{
     if(A<0)
     {
          if(divi<=va[0])
          nra=va[divi];
          else
          {
              divi%=va[0];
              nra=-va[va[0]-divi+1];
          }
     }
     else
     {
         if(divi<=va[0])
         nra=-va[divi];
         else
         {
             divi%=va[0];
             nra=va[va[0]-divi+1];
         }
     }
}
void solve_all()
{
    short int i;
     if(rest==1)
     {
         if(C<0)
          {for(i=1;i<=vc[0];i++)
           if( nra*vc[i]+(A/nra)*(C/vc[i])==B)
          lolz=vc[i];
          }
          else
          {
              for(i=1;i<=vc[0];i++)
              if(  (nra *(-vc[i]) + (A/nra)*(C/(-vc[i]) ))==B)
              lolz=-vc[i];
          }
     }
     else
     {
         if(C<0)
         {
             for(i=1;i<=vc[0];i++)
              if(( nra * (-vc[i]) +(A/nra)*(C/(-vc[i])))==B)
              lolz=-vc[i];
         }
         else
         {
             for(i=1;i<=vc[0];i++)
             if((nra*vc[i]+(A/nra)*(C/vc[i])==B))
             lolz=vc[i];
         }
     }

}
void show_solutie()
{   g<<"(";
      if(A/nra==1)
    g<<"x";
    else
    if(A/nra==-1)
    g<<"-x";
    else
    g<<(A/nra)<<"x";
    if(lolz>0)
    g<<"+"<<lolz;
    else
   g<<lolz;
    g<<")(";
    if(nra==1)
    g<<"x";
    else
    if(nra==-1)
   g<<"-x";
    else
   g<<nra<<"x";
    if(C/lolz>0)
    g<<"+"<<C/lolz;
    else
    g<<C/lolz;
   g<<")";
}
int main()
{
    read();
    divi=K/2;
    rest=K%2;
    divi+=1;
  //  show_a();
   // show_c();
    cout<<"\n";
    solve();
   // cout<<divi<<" "<<nra<<"\n";
    solve_all();
    //cout<<lolz;
    if(lolz)
    show_solutie();
    f.close();
    g.close();
    return 0;
}