#include <iostream>
using namespace std;
struct TVector{
int x,y;
};
class Rect
{
int x1, y1, x2, y2;
public:
TVector Speed;
Rect(int ax1, int ay1, int ax2, int ay2) :x1(ax1), y1(ay1), x2(ax2), y2(ay2)
{
}
void Move(){*this+=Speed;};
bool Intersect(Rect& R) { return !(x1>R.x2 || x2<R.x1 || y1>R.y2 || y2<R.y1); }
Rect& operator +=(const TVector& r){x1+=r.x;x2+=r.x;y1+=r.y;y2+=r.y; return *this;}
};
int main() {
int Hit = 0, Miss = 0;
Rect PlayerBox(0, 0, 50, 100);
Rect BulletBox(0,0, 10, 5);
PlayerBox+=TVector{-100000000,0};
BulletBox+=TVector{100000000,20};
PlayerBox.Speed=TVector{1,0};
BulletBox.Speed=TVector{-1,0};
for (int i = 0; i < 100000000; i++) {
PlayerBox.Move();
BulletBox.Move();
PlayerBox.Intersect(BulletBox)?Hit++:Miss++;
}
cout << "Hits:" << Hit << " Miss:" << Miss << " Total:" << (Hit + Miss);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3QgVFZlY3RvcnsKCWludCB4LHk7Cn07CmNsYXNzIFJlY3QKewoJaW50IHgxLCB5MSwgeDIsIHkyOwpwdWJsaWM6CiAgICBUVmVjdG9yIFNwZWVkOwoJUmVjdChpbnQgYXgxLCBpbnQgYXkxLCBpbnQgYXgyLCBpbnQgYXkyKSA6eDEoYXgxKSwgeTEoYXkxKSwgeDIoYXgyKSwgeTIoYXkyKQoJewoKCX0KCXZvaWQgTW92ZSgpeyp0aGlzKz1TcGVlZDt9OwoJYm9vbCBJbnRlcnNlY3QoUmVjdCYgUikgeyByZXR1cm4gISh4MT5SLngyIHx8IHgyPFIueDEgfHwgeTE+Ui55MiB8fCB5MjxSLnkxKTsgfQoJUmVjdCYgb3BlcmF0b3IgKz0oY29uc3QgVFZlY3RvciYgcil7eDErPXIueDt4Mis9ci54O3kxKz1yLnk7eTIrPXIueTsgcmV0dXJuICp0aGlzO30KfTsKCmludCBtYWluKCkgewoKCWludCBIaXQgPSAwLCBNaXNzID0gMDsKICAgIFJlY3QgUGxheWVyQm94KDAsIDAsIDUwLCAxMDApOwoJUmVjdCBCdWxsZXRCb3goMCwwLCAxMCwgIDUpOwoJUGxheWVyQm94Kz1UVmVjdG9yey0xMDAwMDAwMDAsMH07CglCdWxsZXRCb3grPVRWZWN0b3J7MTAwMDAwMDAwLDIwfTsKCVBsYXllckJveC5TcGVlZD1UVmVjdG9yezEsMH07CglCdWxsZXRCb3guU3BlZWQ9VFZlY3RvcnstMSwwfTsKCWZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAwMDAwOyBpKyspIHsKCQlQbGF5ZXJCb3guTW92ZSgpOwoJCUJ1bGxldEJveC5Nb3ZlKCk7CgkJUGxheWVyQm94LkludGVyc2VjdChCdWxsZXRCb3gpP0hpdCsrOk1pc3MrKzsKCX0KCgoJY291dCA8PCAiSGl0czoiIDw8IEhpdCA8PCAiIE1pc3M6IiA8PCBNaXNzIDw8ICIgVG90YWw6IiA8PCAoSGl0ICsgTWlzcyk7CgoJcmV0dXJuIDA7Cn0=