#include #include #include #include using namespace std; struct interval { double nejmensi, nejvetsi; }; int main(void) { interval intervaly[4]; /* Inicializujeme na hodnoty větší/menší než libovolné přípustné. */ for (int i = 0; i < 4; i++) { intervaly[i].nejmensi = 370; intervaly[i].nejvetsi = -10; } int n, kx, ky, x, y; scanf("%d%d%d", &n, &kx, &ky); /* Zvlášť ošetřeme speciální případ, že Kocourkov je jediné město. */ if (n == 1) { printf("0\n"); return 0; } for (int i = 0; i < n - 1; i++) { scanf("%d%d", &x, &y); x -= kx; y -= ky; double uhel = (180 * atan2 (y, x) / M_PI); if (uhel < 0) uhel += 360; int ino = (int) (uhel / 90); intervaly[ino].nejmensi = min(intervaly[ino].nejmensi, uhel); intervaly[ino].nejvetsi = max(intervaly[ino].nejvetsi, uhel); } vector posloupnost; for (int i = 0; i < 4; i++) { /* Ignorujeme prázdné intervaly. */ if (intervaly[i].nejmensi > 360) continue; /* Když interval obsahuje jen jedno číslo, přidáme ho dvakrát, což nevadí. */ posloupnost.push_back(intervaly[i].nejmensi); posloupnost.push_back(intervaly[i].nejvetsi); } /* Abychom nemuseli zvlášť ošetřovat mezeru mezi posledním a prvním číslem. */ posloupnost.push_back(posloupnost[0] + 360); for (auto i = posloupnost.begin(); i + 1 != posloupnost.end(); ++i) { double rozdil = *(i + 1) - *i; if (rozdil > 180) { double alpha = (*(i + 1) + *i) / 2; /* Aby výsledek byl v rozmezí [0,360). */ if (alpha >= 360) alpha -= 360; printf("%.2f\n", alpha); return 0; } } printf("nelze\n"); return 0; }