C++ zadanie ze współrzędnymi

0

Witam.
Robię sobie ostatnio zadanka z main.edu.pl i napotkałem takie: http://main.edu.pl/pl/user.phtml?op=showtask&task=gdz&con=PAS
Czy możecie mi powiedzieć o co tu chodzi? Myślałem, że o tablicę dwuwymiarową, ale te współrzędne mi nie pasują.
Nie rozumiem zatem o co chodzi z tymi działkami.

1

2 - dwie koleżanki
1 1 5 5 - współrzędne działki Kasi Ax Ay Bx By
7 7 9 9 - współrzędne działki Basi Ax Ay Bx By
2 2 - współrzędne Jasia
poprawną odpowiedzią jest:

1 - Jaś u Kasi

0

Czyli rozumiem, że np działka rozciąga się od pola 11 do pola 55 w tablicy tak?

1

Nie, to prostokąt o współrzędnych 1,1 oraz 5,5 Jaś jest w punkcie o współrzędnych 2 2, więc jest właśnie na tej działce. Czyli bierzesz listę działek, i sprawdzasz czy punkt podany jako "Jaś" mieści się na aktualnie sprawdzanej, jak nie to sprawdzasz następną. Generalnie w tym zadaniu masz znany ze szkoły układ współrzędnych, powtórz geometrię a pewnie znajdziesz rozwiązanie.

0

Witam ponownie.
http://4programmers.net/Pastebin/2574
Co mam źle w tym kodzie, że dla współrzędnych Jasia równych 2 2 zwraca dobry wynik, a dla np. 6 6 już nie?

1

Po pierwsze 6 6 - to Jaś jest w polu, może miałeś na myśli 8 8 ale dla 8 8 działa.
Po drugie, wystarczy tyle:

#include <iostream>
using namespace std;

struct Pkt { unsigned x,y; };
struct Girl { Pkt a,b; };

int main()
  {
   int N;
   cin>>N;
   Girl G[10];
   Pkt J;
   for(int i=0;i<N;++i) cin>>G[i].a.x>>G[i].a.y>>G[i].b.x>>G[i].b.y;
   cin>>J.x>>J.y;
   for(int i=0;i<N;++i) if((G[i].a.x<=J.x)&&(J.x<=G[i].b.x)&&(G[i].a.y<=J.y)&&(J.y<=G[i].b.y)) cout<<(N=i+1)<<endl;
   return 0;
  }

Albo bardziej rozpisując:

#include <iostream>
using namespace std;

struct Pkt { unsigned x,y; };
struct Girl { Pkt a,b; };
istream &operator>>(istream &s,Pkt &p) { return s>>p.x>>p.y; }
istream &operator>>(istream &s,Girl &g) { return s>>g.a>>g.b; }
bool operator<=(const Pkt &a,const Pkt &b) { return (a.x<=b.x)&&(a.y<=b.y); }
bool operator&(const Pkt &p,const Girl &g) { return (g.a<=p)&&(p<=g.b); }

int main()
  {
   int N;
   cin>>N;
   Girl G[10];
   Pkt J;
   for(int i=0;i<N;++i) cin>>G[i];
   cin>>J;
   for(int i=0;i<N;++i) if(J&G[i]) cout<<(N=i+1)<<endl;
   return 0;
  }
0

Ok dzięki za skrócenie kodu Mistrzu. :)

0

PS: Wie ktoś może gdzie coś przełączyć w Visual Studio, żeby mi konsoli nie wyłaczało po zakończeniu działania programu, tylko żeby pałzowało?

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