1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
#include <iostream>
using namespace std;
void sortowanie(int* tab, int lewy, int prawy)
{
    int i = lewy - 1, j = prawy + 1;
    int pivot = tab[(lewy + prawy) / 2];
    while (1)
    {
        while (pivot > tab[++i]);
        
        while (pivot < tab[--j]);

        if (i <= j)
            swap(tab[i], tab[j]);
        else
            break;
    }
    if (j > lewy)
        sortowanie(tab, lewy, j);
    if (i < prawy)
        sortowanie(tab, i, prawy);
}
int main()
{
    int n, i, k = 0, l = 1, j, rozmiar1 = 0, rozmiar2 = 0, m, wynik = 0;
    cin >> n;
    int* tab = new int[3*n];
    for (i = 0; i < 3*n; i+=3)
    {
        cin >> tab[i] >> tab[i + 1] >> tab[i + 2]; //tab[0] r , tab[1] w , tab[2] t
    }
    int* r1 = new int[2*n];
    for (i = 0, j = 0; i < 3*n; i+=3)
    {
        if (tab[i] == 1)
        {
            r1[j] = tab[i+1];
            r1[j + 1] = tab[i + 2];
            j += 2;
            rozmiar1 += 2;
        }
    }
    int* r2 = new int[2*n];
    for (i = 0, j = 0; i < 3 * n; i += 3)
    {
        if (tab[i] == 2)
        {
            r2[j] = tab[i + 1];
            r2[j + 1] = tab[i + 2];
            j += 2;
            rozmiar2 += 2;
        }
    }
    delete[] tab;
    rozmiar1 = rozmiar1 / 2;
    int* s1 = new int[rozmiar1];
    for (i = 0, j = 0; i < rozmiar1 * 2; i += 2)
    {
        s1[j] = r1[i] - r1[i + 1];
        j++;
    }
    rozmiar2 = rozmiar2 / 2;
    int* s2 = new int[rozmiar2];
    for (i = 0, j = 0; i < rozmiar2 * 2; i += 2)
    {
        s2[j] = r2[i] - r2[i + 1];
        j++;
    }
    delete[] r1;
    delete[] r2;
    sortowanie(s1, 0, rozmiar1 - 1);
    sortowanie(s2, 0, rozmiar2 - 1);
    for (i = 0; i < rozmiar1; i++)
    {
         m = s1[i];
         if (i != rozmiar1 - 1)
         {
             if (s1[i + 1] == m)
             {
                 l++;
                 continue;
             }
         }
         for (j = 0; j < rozmiar2; j++)
         {
             if (s2[j] == m)
             {
                 k++;
                 while (true)
                 {
                     if (s2[j + 1] != m)
                         break;
                     k++;
                     j++;
                 }
                 if (k < l)
                     wynik = wynik + k;
                 else
                     wynik = wynik + l;
                 k = 0;
                 l = 1;
             }
         }
    }
    cout << wynik;
    return 0;
}