fork download
  1.  
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. #define int long long
  7. #define nn "\n"
  8. #define pi pair<int, int>
  9. #define fi first
  10. #define se second
  11. #define lb lower_bound
  12. #define ub upper_bound
  13. #define eb emplace_back
  14. #define pb push_back
  15. #define TASK "DTTG"
  16.  
  17. #define ms(a, x) memset(a, x, sizeof(a))
  18. #define all(a) a.begin(), a.end()
  19. #define All(a, n) a + 1, a + 1 + n
  20.  
  21. #define LOG 19
  22.  
  23. const int INF = 1e18;
  24. const int mod = 1e9;
  25. const int N = 1e5 + 5;
  26. const int MOD = 998244353;
  27. struct Point{
  28. int x, y;
  29. bool operator == (const Point &other) const{
  30. return x == other.x && y == other.y;
  31. }
  32. };
  33.  
  34. Point a, b, c, m, n;
  35.  
  36. int cross(Point u, Point v, Point w){
  37. return (v.x - u.x) * (w.y - u.y) - (v.y - u.y) * (w.x - u.x);
  38. }
  39.  
  40. bool trenDoan(Point u, Point v, Point w){
  41. return cross(u, v, w) == 0
  42. && min(u.x, v.x) <= w.x
  43. && w.x <= max(u.x, v.x)
  44. && min(u.y, v.y) <= w.y
  45. && w.y <= max(u.y, v.y);
  46. }
  47. bool giaoNhau(Point u, Point v, Point s, Point t){
  48. int c1 = cross(u, v, s);
  49. int c2 = cross(u, v, t);
  50. int c3 = cross(s, t, u);
  51. int c4 = cross(s, t, v);
  52. if(c1 == 0 && trenDoan(u, v, s)) return true;
  53. if(c2 == 0 && trenDoan(u, v, t)) return true;
  54. if(c3 == 0 && trenDoan(s, t, u)) return true;
  55. if(c4 == 0 && trenDoan(s, t, v)) return true;
  56. return ((c1 > 0 && c2 < 0) || (c1 < 0 && c2 > 0))
  57. && ((c3 > 0 && c4 < 0) || (c3 < 0 && c4 > 0));
  58. }
  59.  
  60. bool trongTamGiac(Point p){
  61. int s1 = cross(a, b, p);
  62. int s2 = cross(b, c, p);
  63. int s3 = cross(c, a, p);
  64.  
  65. return (s1 > 0 && s2 > 0 && s3 > 0)
  66. || (s1 < 0 && s2 < 0 && s3 < 0);
  67. }
  68.  
  69. bool trungCanh(Point u, Point v){
  70. return trenDoan(u, v, m) && trenDoan(u, v, n)
  71. && cross(u, v, m) == 0
  72. && cross(u, v, n) == 0;
  73. }
  74.  
  75. void nhap(){
  76. cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y;
  77. cin >> m.x >> m.y >> n.x >> n.y;
  78. }
  79.  
  80. void solve(){
  81. if(trungCanh(a, b) || trungCanh(b, c) || trungCanh(c, a)){
  82. cout << 3 << nn;
  83. return;
  84. }
  85. if(trongTamGiac(m) && trongTamGiac(n)){
  86. cout << 4 << nn;
  87. return;
  88. }
  89. vector<Point> canh = {a, b, c};
  90. vector<Point> diem;
  91.  
  92. for(int i = 0; i < 3; i++){
  93. Point u = canh[i];
  94. Point v = canh[(i + 1) % 3];
  95.  
  96. if(!giaoNhau(m, n, u, v)) continue;
  97. if(cross(m, n, u) == 0 && cross(m, n, v) == 0){
  98. if(trenDoan(m, n, u)) diem.pb(u);
  99. if(trenDoan(m, n, v)) diem.pb(v);
  100. if(trenDoan(u, v, m)) diem.pb(m);
  101. if(trenDoan(u, v, n)) diem.pb(n);
  102. }
  103. else{
  104. if(cross(m, n, u) == 0 && trenDoan(m, n, u)) diem.pb(u);
  105. else if(cross(m, n, v) == 0 && trenDoan(m, n, v)) diem.pb(v);
  106. else if(cross(u, v, m) == 0 && trenDoan(u, v, m)) diem.pb(m);
  107. else if(cross(u, v, n) == 0 && trenDoan(u, v, n)) diem.pb(n);
  108. else{
  109. int c1 = cross(m, n, u);
  110. int c2 = cross(m, n, v);
  111. int c3 = cross(u, v, m);
  112. int c4 = cross(u, v, n);
  113. if(((c1 > 0 && c2 < 0) || (c1 < 0 && c2 > 0))
  114. && ((c3 > 0 && c4 < 0) || (c3 < 0 && c4 > 0))){
  115. cout << 2 << nn;
  116. return;
  117. }
  118. }
  119. }
  120. }
  121. sort(all(diem), [](Point u, Point v){
  122. if(u.x != v.x) return u.x < v.x;
  123. return u.y < v.y;
  124. });
  125. diem.erase(unique(all(diem)), diem.end());
  126. if(diem.size() >= 2) cout << 2 << nn;
  127. else if(diem.size() == 1) cout << 1 << nn;
  128. else cout << 0 << nn;
  129. }
  130.  
  131. signed main(){
  132. if(fopen(TASK".INP", "r")){
  133. freopen(TASK".INP", "r", stdin);
  134. freopen(TASK".OUT", "w", stdout);
  135. }
  136.  
  137. ios_base::sync_with_stdio(0);
  138. cin.tie(0);
  139. cout.tie(0);
  140. nhap();
  141. solve();
  142. return (0 ^ 0);
  143. }
  144.  
Success #stdin #stdout 0.01s 5324KB
stdin
0 0 10 0 10 10
0 5 0 10
stdout
0