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.
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
Czyli rozumiem, że np działka rozciąga się od pola 11 do pola 55 w tablicy tak?
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.
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?
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;
}
Ok dzięki za skrócenie kodu Mistrzu. :)
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?