#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int comp(const void* a_, const void* b_) {
return *(int*)a_ - *(int*)b_;
}
int main() {
int N = 20;
int* A
= malloc(N
* sizeof(int)); int* B
= malloc(N
* sizeof(int)); int* C
= malloc(N
* sizeof(int));
for (int i = 0; i < N; ++i) {
}
for (int i
= 0; i
< N
; ++i
) printf("%d ", A
[i
]);
for (int i
= 0; i
< N
; ++i
) printf("%d ", B
[i
]);
// Отсортировали
qsort(A
, N
, sizeof(int), comp
); qsort(B
, N
, sizeof(int), comp
);
for (int i
= 0; i
< N
; ++i
) printf("%d ", A
[i
]); for (int i
= 0; i
< N
; ++i
) printf("%d ", B
[i
]);
// Выбросили дубли
int* a = A, *b = B;
int NA, NB;
for (int* c = a; ++a < A + N; NA = c - A + 1)
if (*c != *a && ++c != a) * c = *a;
for (int* c = b; ++b < B + N; NB = c - B + 1)
if (*c != *b && ++c != b) * c = *b;
for (int i
= 0; i
< NA
; ++i
) printf("%d ", A
[i
]); for (int i
= 0; i
< NB
; ++i
) printf("%d ", B
[i
]);
// Находим разность отсортированных смножеств
a = A;
b = B;
int j = 0;
while (a < A + NA) {
if (b == B + NB) {
for (; a < A + NA;) C[j++] = *a++;
break;
}
if (*a < *b) C[j++] = *a++;
else {
if (*b >= *a) a++;
b++;
}
}
for (int i
= 0; i
< j
; ++i
) printf("%d ", C
[i
]); }
ICAgICNpbmNsdWRlIDxzdGRsaWIuaD4KICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgI2luY2x1ZGUgPHN0cmluZy5oPgogICAgCiAgICBpbnQgY29tcChjb25zdCB2b2lkKiBhXywgY29uc3Qgdm9pZCogYl8pIHsKICAgICAgICByZXR1cm4gKihpbnQqKWFfIC0gKihpbnQqKWJfOwogICAgICAgIH0KICAgIAogICAgaW50IG1haW4oKSB7CiAgICAgICAgaW50IE4gPSAyMDsKICAgICAgICBpbnQqIEEgPSBtYWxsb2MoTiAqIHNpemVvZihpbnQpKTsKICAgICAgICBpbnQqIEIgPSBtYWxsb2MoTiAqIHNpemVvZihpbnQpKTsKICAgICAgICBpbnQqIEMgPSBtYWxsb2MoTiAqIHNpemVvZihpbnQpKTsKICAgIAogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgKytpKSB7CiAgICAgICAgICAgIEFbaV0gPSByYW5kKCkgJSAzMDsKICAgICAgICAgICAgQltpXSA9IHJhbmQoKSAlIDMwOwogICAgICAgICAgICB9CiAgICAKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47ICsraSkgcHJpbnRmKCIlZCAiLCBBW2ldKTsKICAgIAogICAgICAgIHB1dHMoIiIpOwogICAgCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpIHByaW50ZigiJWQgIiwgQltpXSk7CiAgICAKICAgICAgICBwdXRzKCIiKTsKICAgICAgICAvLyDQntGC0YHQvtGA0YLQuNGA0L7QstCw0LvQuAogICAgICAgIHFzb3J0KEEsIE4sIHNpemVvZihpbnQpLCBjb21wKTsKICAgICAgICBxc29ydChCLCBOLCBzaXplb2YoaW50KSwgY29tcCk7CgogICAgICAgIHB1dHMoIiIpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgKytpKSBwcmludGYoIiVkICIsIEFbaV0pOwogICAgICAgIHB1dHMoIiIpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgKytpKSBwcmludGYoIiVkICIsIEJbaV0pOwogICAgICAgIHB1dHMoIiIpOwoKICAgICAgICAvLyDQktGL0LHRgNC+0YHQuNC70Lgg0LTRg9Cx0LvQuAogICAgICAgIGludCogYSA9IEEsICpiID0gQjsKICAgICAgICBpbnQgTkEsIE5COwogICAgCiAgICAgICAgZm9yIChpbnQqIGMgPSBhOyArK2EgPCBBICsgTjsgTkEgPSBjIC0gQSArIDEpCiAgICAgICAgICAgIGlmICgqYyAhPSAqYSAmJiArK2MgIT0gYSkgKiBjID0gKmE7CiAgICAKICAgICAgICBmb3IgKGludCogYyA9IGI7ICsrYiA8IEIgKyBOOyBOQiA9IGMgLSBCICsgMSkKICAgICAgICAgICAgaWYgKCpjICE9ICpiICYmICsrYyAhPSBiKSAqIGMgPSAqYjsKICAgIAogICAgICAgIHB1dHMoIiIpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkE7ICsraSkgcHJpbnRmKCIlZCAiLCBBW2ldKTsKICAgICAgICBwdXRzKCIiKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5COyArK2kpIHByaW50ZigiJWQgIiwgQltpXSk7CiAgICAgICAgcHV0cygiIik7CgogICAgICAgIC8vINCd0LDRhdC+0LTQuNC8INGA0LDQt9C90L7RgdGC0Ywg0L7RgtGB0L7RgNGC0LjRgNC+0LLQsNC90L3Ri9GFINGB0LzQvdC+0LbQtdGB0YLQsgogICAgICAgIGEgPSBBOwogICAgICAgIGIgPSBCOwogICAgICAgIGludCBqID0gMDsKICAgIAogICAgICAgIHdoaWxlIChhIDwgQSArIE5BKSB7CiAgICAgICAgICAgIGlmIChiID09IEIgKyBOQikgewogICAgICAgICAgICAgICAgZm9yICg7IGEgPCBBICsgTkE7KSBDW2orK10gPSAqYSsrOwogICAgCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBpZiAoKmEgPCAqYikgQ1tqKytdID0gKmErKzsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoKmIgPj0gKmEpIGErKzsKICAgIAogICAgICAgICAgICAgICAgYisrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAKICAgICAgICBwcmludGYoIiVkXG4iLCBqKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGo7ICsraSkgcHJpbnRmKCIlZCAiLCBDW2ldKTsKICAgICAgICBwdXRzKCIiKTsKICAgICAgICB9Cgo=