#include <stdio.h>
#include <string.h>
#define DEBUG
size_t find_dup(int arr[][2], size_t n)
{
for (size_t i = 0; i < n; i++)
{
for (size_t j = i + 1; j < n; j++)
{
if (arr[i][0] == arr[j][0] && arr[i][1] == arr[j][1])
{
memcpy(&arr
[j
][0], &arr
[j
+ 1][0], (n
- j
) * sizeof(int) * 2); memset(&arr
[--n
][0], 0, sizeof(int) * 2);
#ifdef DEBUG
printf("dup: %d %d\n", arr
[i
][0], arr
[i
][1]); #endif
}
}
}
return n;
}
int main(void)
{
int a[14][2] = {{1, 1}, {1, 1}, {1, 2}, {1, 3}, {1, 4}, {1, 5}, {1, 2}, {3, 5}, {3, 6}, {1, 5}, {4, 4}, {8, 8}, {8, 8}, {0, 1}};
for (size_t i = 0; i < sizeof(a) / sizeof(int) / 2; i++)
printf("%d %d\n", a
[i
][0], a
[i
][1]);
size_t new_size = find_dup(a, sizeof(a) / sizeof(int) / 2);
for (size_t i = 0; i < new_size; i++)
printf("%d %d\n", a
[i
][0], a
[i
][1]); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgREVCVUcKCnNpemVfdCBmaW5kX2R1cChpbnQgYXJyW11bMl0sIHNpemVfdCBuKQp7Cglmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47IGkrKykKCXsKCQlmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBuOyBqKyspCgkJewoJCQlpZiAoYXJyW2ldWzBdID09IGFycltqXVswXSAmJiBhcnJbaV1bMV0gPT0gYXJyW2pdWzFdKQoJCQl7CgkJCQltZW1jcHkoJmFycltqXVswXSwgJmFycltqICsgMV1bMF0sIChuIC0gaikgKiBzaXplb2YoaW50KSAqIDIpOwoJCQkJbWVtc2V0KCZhcnJbLS1uXVswXSwgMCwgc2l6ZW9mKGludCkgKiAyKTsJCgkJCQkKCQkJCSNpZmRlZiBERUJVRwoJCQkJCXByaW50ZigiZHVwOiAlZCAlZFxuIiwgYXJyW2ldWzBdLCBhcnJbaV1bMV0pOwoJCQkJI2VuZGlmCgkJCX0KCQl9Cgl9CglyZXR1cm4gbjsJCn0KCmludCBtYWluKHZvaWQpCnsKCWludCBhWzE0XVsyXSA9IHt7MSwgMX0sIHsxLCAxfSwgezEsIDJ9LCB7MSwgM30sIHsxLCA0fSwgezEsIDV9LCB7MSwgMn0sIHszLCA1fSwgezMsIDZ9LCB7MSwgNX0sIHs0LCA0fSwgezgsIDh9LCB7OCwgOH0sIHswLCAxfX07CgkKCXByaW50ZigiaW5wdXQ6XG4iKTsKCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGEpIC8gc2l6ZW9mKGludCkgLyAyOyBpKyspCgkJcHJpbnRmKCIlZCAlZFxuIiwgYVtpXVswXSwgYVtpXVsxXSk7CgkKCXNpemVfdCBuZXdfc2l6ZSA9IGZpbmRfZHVwKGEsIHNpemVvZihhKSAvIHNpemVvZihpbnQpIC8gMik7CglwcmludGYoIm91dHB1dDpcbiIpOwoJCglmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld19zaXplOyBpKyspCgkJcHJpbnRmKCIlZCAlZFxuIiwgYVtpXVswXSwgYVtpXVsxXSk7CglyZXR1cm4gMDsKfQoK