Advertisement
Guest User

Короткевич Леонид Витальевич

a guest
Jan 21st, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1. // программа написана участником олимпиады СПбГУ с логином ol1731479, который попросил рассмотреть код написанной им программы на этом сайте из-за того, что текстовый редактор на сайте олимпиады ведет себя плохо :( //
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     int n, x[100000], y[100000], i, j, k, w, sign = 0, check = 1;
  9.     cin >> n;
  10.     for(int i = 0; i < n; i++)
  11.         cin >> x[i] >> y[i];
  12.     for(int i = 0; i < n; i++) {
  13.         j = (i + 1) % n;
  14.         k = (i + 2) % n;
  15.         // i, j, k - номера вершин
  16.         w = (x[j]-x[i]) * (y[k]-y[j]) - (y[j]-y[i]) * (x[k] - x[j]);
  17.         // w - векторное произведение двух векторов - смежных сторон многоугольника
  18.         if(w > 0) sign = sign | 1; // | - это побитовое или: sign будет оставаться единичкой или двойкой,
  19.         if(w < 0) sign = sign | 2; // если знак векторного произведения не будет меняться,
  20.         if(sign == 3) check = 0;   // в противном случае sign станет равным трём и тогда многоугольник невыпуклый
  21.     }
  22.     if(n > 2 && sign != 0) { // проверка: многоугольник ли?
  23.         if(check == 0) cout << 0;
  24.         if(check == 1) cout << 1;
  25.     }
  26.     else cout << -1;
  27.     return 0;
  28. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement