Cod sursă (job #358712)

Utilizator avatar andreisontea Andrei Sontea andreisontea IP ascuns
Problemă Romb2 (clasele 9-10) Compilator cpp | 4,75 kb
Rundă Arhiva de probleme Status evaluat
Dată 1 mar. 2018 11:40:12 Scor 5
#include <iostream>
#include <cstdio>

using namespace std;

int determpoz(int x, int y, int panta, int ct, bool super){
    int relatx, relaty;
    //printf("X = %d, y = %d, panta = %d, ct = %d\n\n", x, y, panta, ct);
    if(x > 0){
        if(y > 0){
      //      printf("Ori sus ori dreapta\n");
            if(super){
                relaty = panta * x + ct;
                printf("Relativ y = %d\n\n", relaty);
                if(y < relaty){
        //            printf("Dreapta\n\n");
                    return 0;
                }
          //      printf("Sus\n\n");
                return 3;
            }
            else{
                relatx = panta * y + ct;
            //    printf("Relativ x = %d\n\n", relatx);
                if(x < relatx){
              //      printf("Sus\n\n");
                    return 3;
                }
                //printf("Dreapta\n\n");
                return 0;
            }
        }
        else{
           // printf("Ori jos ori dreapta\n");
            if(super){
                relaty = -(panta * x)  - ct;
             //   printf("Relativ y = %d\n\n", relaty);
                if(y > relaty){
               //     printf("Dreapta\n\n");
                    return 0;
                }
        //        printf("Jos\n\n");
                return 1;
            }
            else{
                relatx = panta * (-y) + ct;
          //      printf("Relativ x = %d\n\n", relatx);
                if(x < relatx){
            //        printf("Jos\n\n");
                    return 1;
                }
              //  printf("Dreapta\n\n");
                return 0;
            }
        }
    }
    else{
        if(y > 0){
 //           printf("Ori sus ori stanga\n");
            if(super){
                relaty = panta * x + ct;
   //             printf("Relativ y = %d\n\n", relaty);
                if(y < relaty){
     //               printf("Stanga\n\n");
                    return 2;
                }
       //         printf("Sus\n\n");
                return 3;
            }
            else{
                relatx = -(panta * y) - ct;
         //       printf("Relativ x = %d\n\n", relatx);
                if(x > relatx){
           //         printf("Sus\n\n");
                    return 3;
                }
             //   printf("Stangan\n\n");
                return 2;
            }
        }
        else{
 //           printf("Ori jos ori stanga\n");
            if(super){
                relaty = panta * x - ct;
   //             printf("Relativ y = %d\n\n", relaty);
                if(y > relaty){
     //               printf("Stanga\n\n");
                    return 2;
                }
       //         printf("Jos\n\n");
                return 1;
            }
            else{
                relatx = panta * y - ct;
         //       printf("Relativ x = %d\n\n", relatx);
                if(x > relatx){
           //         printf("Jos\n\n");
                    return 1;
                }
             //   printf("Stanga\n\n");
                return 2;
            }
        }
    }
}

int main()
{
    freopen("romb2.in", "r", stdin);
    freopen("romb2.out", "w", stdout);
    int t;
    scanf("%d", &t);
    for(int test = 1; test <= t; ++test){
        int dx, dy, k, cx, cy;
        scanf("%d%d%d%d%d", &dx, &dy, &k, &cx, &cy);
        int regiune = 1;
        int panta, constanta;
        //printf("Testul %d\n\n", test);
        bool super = 0;
        if(dx < dy){
            panta = dy / dx;
            super = 1;
        }
        else
            panta = dx / dy;
        //printf("Avem dx = %d si dy = %d. Panta = %d ", dx, dy, panta);
        while(k > 0){
            if(super)
                constanta = dy - dx * panta;
            else
                constanta = dx - dy * panta;
          //  printf("Constanta = %d\n", constanta);
            dx /= 2;
            dy /= 2;
            //printf("Noii dx si dy sunt %d si %d\n", dx, dy);
            int eroare = determpoz(cx, cy, panta, constanta, super);
           // printf("Eroare = %d", eroare);
            if(eroare == 3){
                cy -= dy;
             //   printf(" Merg in rombul 1. Cx = %d, Cy = %d\n\n", cx, cy);
            }
            if(eroare == 2){
                cx += dx;
             //   printf(" Merg in rombul 2. Cx = %d, Cy = %d\n\n", cx, cy);
            }
            if(eroare == 1){
                cy += dy;
               // printf(" Merg in rombul 3. Cx = %d, Cy = %d\n\n", cx, cy);
            }
            if(eroare == 0){
                cx -= dx;
            //    printf(" Merg in rombul 4. Cx = %d, Cy = %d\n\n", cx, cy);
            }
            regiune = 4 * regiune - eroare;
            //printf("Noua regiune este %d\n\n", regiune);
            k--;
        }
        printf("%d\n", regiune);
    }
    return 0;
}