Zadanie ze spoja - Pola Prostokątów

Odpowiedz Nowy wątek
2015-01-07 01:08
Mistikus
0

Witam , mam problem z zadaniem - http://pl.spoj.com/problems/SIL/. Obliczyłem pola prostokątów, oraz współrzędne każdego z wierzchołków trójkąta, zapisałem, więc je do 16 zmiennych typu int. Następnie planowałem zrobić program za pomocą if'ów, jednak uświadomiłem sobie, że warunków jest zbyt dużo. Czy ktoś może mi pomóc, nakierować mnie we właściwym kierunku ? Najlepiej ,gdyby zadanie nie wymagało zbyt zaawansowanych czynności, ponieważ moje umiejętności jeszcze nie są na wysokim poziomie. Język oczywiście C++, z góry dzięki i pozdrawiam.

Jakich trójkątów? - LuIMi 2015-01-07 01:19

Pozostało 580 znaków

2015-01-07 01:26
1
unsigned short wsp[8];
main()
{
for(int i=0, i < 8, i++)
 cin>>wsp[i];
//dalszy kod
}

W ten sposób wczytasz sobie współrzędne. Dalej możesz już łatwo policzyć sobie samemu. wsp[i] to tablica, a wartości i od 0-7 w tej tablicy zwrócą Ci podane tam liczby od pierwszej do ósmej. W związku z tym, iż wartość te będą nieujemne, jest to I ćwiartka układu współrzędnych.

edytowany 1x, ostatnio: LuIMi, 2015-01-07 01:29

Pozostało 580 znaków

2015-01-07 01:31
Mistikus
0

Tzn chodziło mi o pomoc przy ułożeniu algorytmu, który pomoże mi sprawdzić, czy prostokąty na siebie nie nachodzą i odjąć część wspólną od sumy ich pól. Z wczytaniem danych to problemu nie mam ;]

Pozostało 580 znaków

2015-01-07 01:33
0

Patrząc na swoje rozwiązanie sprzed kilku lat mam w sumie 9 zmiennych i 8 if-ów. Rozwiązanie jest w skrócie takie:
wynik = pole_1_prostokata + pole_2_prostokata - pole_czesci_wspolnej.


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 1x, ostatnio: krwq, 2015-01-07 01:34

Pozostało 580 znaków

2015-01-07 01:41
Mistikus
0

No tak, ale największym problemem są te warunki właśnie, dzięki którym możemy określić, czy prostokąty na siebie nachodzą. Może ewentualnie jest możliwość podzielenia się kodem ? Bym sobie wszystkio przeanalizował.

Pozostało 580 znaków

2015-01-07 01:45
0

Nie jest najpiękniejszy, ale trzymaj :P

#include <stdio.h>

int pole(int ldx, int ldy, int rgx, int rgy)
{
  return (rgx-ldx)*(rgy-ldy);
}

int main()
{
  int aldx,aldy,argx,argy;
  int bldx,bldy,brgx,brgy;
  int p;

  scanf("%d%d%d%d",&aldx,&aldy,&argx,&argy);
  scanf("%d%d%d%d",&bldx,&bldy,&brgx,&brgy);

  p = pole(aldx,aldy,argx,argy) + pole(bldx,bldy,brgx,brgy);

  if (aldx<bldx)
    aldx=bldx; else
  if (aldx>brgx)
    aldx=brgx;

  if (argx<bldx)
    argx=bldx; else
  if (argx>brgx)
    argx=brgx;

  if (aldy<bldy)
    aldy=bldy; else
  if (aldy>brgy)
    aldy=brgy;

  if (argy<bldy)
    argy=bldy; else
  if (argy>brgy)
    argy=brgy;

  p-=pole(aldx,aldy,argx,argy);

  printf("%d\n",p);

  return 0;
}

░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2015-01-07 01:46
Mistikus
0

Dzięki

Pozostało 580 znaków

2015-01-07 10:01
3

To też działa:

#include <cstdio>
#include <algorithm>
using namespace std;

int main()
  {
   int pL,pT,pR,pB,qL,qT,qR,qB;
   scanf("%d%d%d%d%d%d%d%d",&pL,&pT,&pR,&pB,&qL,&qT,&qR,&qB);
   printf("%d\n",(pR-pL)*(pB-pT)+(qR-qL)*(qB-qT)-max(0,min(pR,qR)-max(pL,qL))*max(0,min(pB,qB)-max(pT,qT)));
   return 0;
  }
   printf
     (
      "%d\n",
      (pR-pL)*(pB-pT) // p
      +(qR-qL)*(qB-qT) // q
      -max(0,min(pR,qR)-max(pL,qL))*max(0,min(pB,qB)-max(pT,qT)) // intersect
     );

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-07 11:06
Pokaż pozostałe 35 komentarzy
Zoptymalizować? To było od nowa i "po prostu". Przykro mi, że pracujesz w miejscu, w którym kara się pracowników w taki sposób za takie rzeczy. Nigdy o czymś takim nie słyszałem. Code review to jest grupowa aktywność a nie, że ktoś krzyczy. Nawet w uważanym za tak "niskopoziomowy" czy "krytyczny" i wielokrotnie cytowany w kontekście nieczytelności, wydajności i starożytności embedded się tak nie pisze. - Endrju 2015-01-07 18:32
Poza tym spójrz na to inaczej. Jeżeli napiszę kod, a ktoś go nie zrozumie to nie wysyłamy go na Syberię, tylko jest to dla mnie wskazówka, że być może źle go napisałem. To nie jest liceum ani studia, w pracy mamy ludzi, którzy umieją programować. A poza tym to wiemy, że z tej dyskusji nic nie wyniknie. :-D - Endrju 2015-01-07 18:34
To nie kara tylko przesunięcie na mniej odpowiedzialną pracę celem odpoczęcia. Tak rozumiem code review o którym piszesz to grupowa aktywność ale ty już wcześniej wiesz czyje kody (wszystkie) nie przejdą. Czyli demokracja w stylu Patrycjusza (Świat Dysku) który mawiał: - "Demokracja to jedna osoba - jeden głoś i to ja jestem tą jedną osobą która ma ten jeden głos". - _13th_Dragon 2015-01-07 19:18
No i kolejna teoria z dupy. ;-) Nie ja o tym decyduje. Mamy standard kodowania, mamy ogromny codebase, mamy masę doświadczonych ludzi. Takie krzaki do tego po prostu nie pasują bo nigdzie ich nie ma, stąd mogę powiedzieć, że nie przejdzie. Przecież wiem z kim i nad czym pracuje i uczestniczę w tych review. - Endrju 2015-01-07 19:27
Pisanie nieczytelnych kodów to też pewnego rodzaju sztuka (zwłaszcza takich do których trudno się przyczepić obiektywnie). Np. zbicie całej funkcji w jedno wyrażenie. Albo przykład z mojego podwórka: funkcja-algorytm napisana przejrzyście, ale wykonująca kilka zapomnianych konstrukcji językowych BEZ GRAMA KOMENTARZA (pewnie autor uznał że to niezmienne reguły matematyczne). Niektórzy autorzy książek (np. Lasse Koskela) twierdzą że nawet XOR może być nieczytelny. Kwestia gustu. Ale ta historia z raportami jest po prostu smutna. - vpiotr 2015-01-07 20:49

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0