Language: C++

/**
 *  Railroad Conflict (Problem D, Practice Contest for Japan Domestic, 2006-06-18)
 *  by Kenji Inoue, 2007-01-07
 **/

#include <iostream>
#include <vector>
#include <complex>

using namespace std;

typedef complex<double> P;

#define EPS (1e-9)

double cross(P a, P b) {
  return (a.real() * b.imag() - a.imag() * b.real());
}

int is_intersected(P a1, P a2, P b1, P b2) {
  return ( ( cross(a2-a1, b1-a1) * cross(a2-a1, b2-a1) < EPS ) &&
           ( cross(b2-b1, a1-b1) * cross(b2-b1, a2-b1) < EPS ) );
}

P s[101], t[101];
int c[101], l[101];

struct intersection {
  double t; // parameter t
  int n;    // index of intersected line

  bool operator<(const intersection &a) const {
    return (t < a.t);
  }
};

int main() {
  int N;
  cin >> N;
  while (N--) {
    P a, b;
    cin >> a.real() >> a.imag();
    cin >> b.real() >> b.imag();

    int n;
    cin >> n;
    for (int i=0; i<n; i++) {
      cin >> s[i].real() >> s[i].imag();
      cin >> t[i].real() >> t[i].imag();
      cin >> c[i] >> l[i];
    }

    vector<intersection> is;
    for (int i=0; i<n; i++) {
      if (!is_intersected(a, b, s[i], t[i])) { continue; }
    //  if (abs(cross(b-a, t[i]-s[i])) < EPS) { continue; }

      P x = t[i] - s[i];
      double d1 = abs(cross(x, a-s[i]));
      double d2 = abs(cross(x, b-s[i]));
      double t = d1 / (d1 + d2);

      intersection tmp = {t, i};
      is.push_back(tmp);
    }

    sort(is.begin(), is.end());

    int curr; // current status: up (=1) or down (=0)
    if (is.size() > 0) {
      int idx = is[0].n;
      curr = (c[idx] == 1 ? l[idx] : !l[idx]);
    }

    int cnt = 0;
    for (int i=1; i<is.size(); i++) {
      int idx = is[i].n;
      if ( (c[idx] == 1 && curr != l[idx]) ||
           (c[idx] == 0 && curr == l[idx]) ) {
        curr = !curr;
        cnt++;
      }
    }

    cout << cnt << endl;
  }

  return 0;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:42:9: error: no match for 'operator>>' (operand types are 'std::istream' {aka 'std::basic_istream<char>'} and 'double')
   42 |     cin >> a.real() >> a.imag();
      |     ~~~ ^~ ~~~~~~~~
      |     |            |
      |     |            double
      |     std::istream {aka std::basic_istream<char>}
In file included from /usr/include/c++/14/iostream:42,
                 from a.cc:6:
/usr/include/c++/14/istream:170:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(bool&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  170 |       operator>>(bool& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:170:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'bool&' to a value of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:174:7: note: candidate: 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(short int&) [with _CharT = char; _Traits = std::char_traits<char>]' (near match)
  174 |       operator>>(short& __n);
      |       ^~~~~~~~
/usr/include/c++/14/istream:174:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'short int&' to a value of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:177:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(short unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  177 |       operator>>(unsigned short& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:177:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'short unsigned int&' to a value of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:181:7: note: candidate: 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(int&) [with _CharT = char; _Traits = std::char_traits<char>]' (near match)
  181 |       operator>>(int& __n);
      |       ^~~~~~~~
/usr/include/c++/14/istream:181:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'int&' to a value of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:184:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  184 |       operator>>(unsigned int& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:184:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'unsigned int&' to a value of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:188:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  188 |       operator>>(long& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:188:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'long int&' to a value of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:192:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  192 |       operator>>(unsigned long& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:192:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'long unsigned int&' to a value of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:199:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  199 |       operator>>(long long& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:199:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'long long int&' to a value of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:203:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  203 |       operator>>(unsigned long long& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:203:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'long long unsigned int&' to a value of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:219:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(float&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  219 |       operator>>(float& __f)
      |       ^~~~~~~~
/usr/include/c++/14/istream:219:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'float&' to a value of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:223:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(double&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  223 |       operator>>(double& __f)
      |       ^~~~~~~~
/usr/include/c++/14/istream:223:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'double&' to an rvalue of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:227:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long double&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  227 |       operator>>(long double& __f)
      |       ^~~~~~~~
/usr/include/c++/14/istream:227:7: note:   conversion of argument 1 would be ill-formed:
a.cc:42:18: error: cannot bind non-const lvalue reference of type 'long double&' to a value of type 'double'
   42 |     cin >> a.real() >> a.imag();
      |            ~~~~~~^~
/usr/include/c++/14/istream:328:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(void*&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]'
  328 |       operator>>(void*& __p)
      |       ^~~~~~~~
/usr/include/c++/14/istream:328:25: note:   no known conversion for argument 1 from 'double' to 'void*&'
  328 |       operator>>(void*& __p)
      |                  ~~~~~~~^~~
/usr/include/c++/14/istream:122:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(__istream_type& (*)(__istream_type&)) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]'
  122 |       operator>>(__istream_type& (*__pf)(__istream_type&))
      |       ^~~~~~~~
/usr/include/c++/14/istream:122:36: note:   no known conversion for argument 1 from 'double' to 'std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&)' {aka 'std::basic_istream<char>& (*)(std::basic_istream<char>&)'}
  122 |       operator>>(__istream_type& (*__pf)(__istream_type&))
      |                  ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/istream:126:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(__ios_type& (*)(__ios_type&)) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>; __ios_type = std::basic_ios<char>]'
  126 |       operator>>(__ios_type& (*__pf)(__ios_type&))
      |       ^~~~~~~~
/usr/include/c++/14/istream:126:32: note:   no known conversion for argument 1 from 'double' to 'std::basic_istream<char>::__ios_type& (*)(std::basic_istream<char>::__ios_type&)' {aka 'std::basic_ios<char>& (*)(std::basic_ios<char>&)'}
  126 |       operator>>(__ios_type& (*__pf)(__ios_type&))
      |                  ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
/usr/include/c++/14/istream:133:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]'
  133 |       operator>>(ios_base& (*__pf)(ios_base&))
      |       ^~~~~~~~
/usr/include/c++/14/istream:133:30: note:   no known conversion for argument 1 from 'double' to 'std::ios_base& (*)(std::ios_base&)'
  133 |       operator>>(ios_base& (*__pf)(ios_base&))
      |                  ~~~~~~~~~~~