Potrebna mi je pomoć, nikako ne uspevam da rešim zadatak: http://bee.bubblecup.org/Problems/MnogougaoTestKonveks#problem
Ispod je moje rešenje, u njemu pokušavam da pratim promenu nagiba susednih duži, ali ne prolazi testiranje. Bilo koji test primer koji sam uspem da smislim prolazi, pa mora biti da nešto previđam? Da li se tačka i prava računaju kao konveksni poligoni?
#include <iostream>
#include <vector>
using namespace std;
struct Point {
double x;
double y;
};
static int sign(double d)
{
return d == 0 ? 0 : d > 0 ? +1 : -1;
}
int main()
{
constexpr int kNumPoints = 5;
vector<Point> points(kNumPoints);
for (int i = 0; i < kNumPoints; i++) {
cin >> points[i].x;
cin >> points[i].y;
}
int lastSign = 0xDEC0'0'0;
for (size_t i = 0; i < points.size(); i++) {
auto p1 = points[i];
auto p2 = points[(i + 1) % points.size()];
auto p3 = points[(i + 2) % points.size()];
auto dx1 = p2.x - p1.x;
auto dy1 = p2.y - p1.y;
auto dx2 = p3.x - p2.x;
auto dy2 = p3.y - p2.y;
if (auto t = dy1 * dx2 - dy2 * dx1) {
if (lastSign > 1) {
lastSign = sign(t);
} else if (lastSign != sign(t)) {
cout << "NE";
return 0;
}
}
}
cout << "DA";
return 0;
}