Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // программа написана участником олимпиады СПбГУ с логином ol1731479, который попросил рассмотреть код написанной им программы на этом сайте из-за того, что текстовый редактор на сайте олимпиады ведет себя плохо :( //
- #include <iostream>
- using namespace std;
- int main()
- {
- int n, x[100000], y[100000], i, j, k, w, sign = 0, check = 1;
- cin >> n;
- for(int i = 0; i < n; i++)
- cin >> x[i] >> y[i];
- for(int i = 0; i < n; i++) {
- j = (i + 1) % n;
- k = (i + 2) % n;
- // i, j, k - номера вершин
- w = (x[j]-x[i]) * (y[k]-y[j]) - (y[j]-y[i]) * (x[k] - x[j]);
- // w - векторное произведение двух векторов - смежных сторон многоугольника
- if(w > 0) sign = sign | 1; // | - это побитовое или: sign будет оставаться единичкой или двойкой,
- if(w < 0) sign = sign | 2; // если знак векторного произведения не будет меняться,
- if(sign == 3) check = 0; // в противном случае sign станет равным трём и тогда многоугольник невыпуклый
- }
- if(n > 2 && sign != 0) { // проверка: многоугольник ли?
- if(check == 0) cout << 0;
- if(check == 1) cout << 1;
- }
- else cout << -1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement