#include <stdio.h>
#define SPACING_BITS ((1<<4)|(1<<9)|(1<<14)|(1<<19))
int createVector(int v0, int v1, int v2, int v3)
{
return v0 | (v1 << 5) | (v2 << 10) | (v3 << 15);
}
int vectorDominates(int vectorA, int vectorB)
{
// returns 1 if vectorA dominates vectorB:
return (((vectorA | SPACING_BITS) - vectorB) & SPACING_BITS) == SPACING_BITS;
}
int compare(int vectorA, int vectorB)
{
if(vectorDominates(vectorA, vectorB))
return 1;
else if(vectorDominates(vectorB, vectorA))
return -1;
return 0;
}
int main(void) {
int v1 = createVector(10, 4, 12, 5);
int v2 = createVector(9, 3, 10, 5);
int v3 = createVector(3, 9, 10, 5);
printf("v1 dominates v2 %s\n", vectorDominates
(v1
, v2
) ? "yes" : "no"); printf("v2 dominates v1 %s\n", vectorDominates
(v2
, v1
) ? "yes" : "no"); printf("v2 dominates v3 %s\n", vectorDominates
(v2
, v3
) ? "yes" : "no"); printf("v3 dominates v2 %s\n", vectorDominates
(v3
, v2
) ? "yes" : "no");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNQQUNJTkdfQklUUyAoKDE8PDQpfCgxPDw5KXwoMTw8MTQpfCgxPDwxOSkpCmludCBjcmVhdGVWZWN0b3IoaW50IHYwLCBpbnQgdjEsIGludCB2MiwgaW50IHYzKQp7CglyZXR1cm4gdjAgfCAodjEgPDwgNSkgfCAodjIgPDwgMTApIHwgKHYzIDw8IDE1KTsKfQoKaW50IHZlY3RvckRvbWluYXRlcyhpbnQgdmVjdG9yQSwgaW50IHZlY3RvckIpCnsKICAgICAvLyByZXR1cm5zIDEgaWYgdmVjdG9yQSBkb21pbmF0ZXMgdmVjdG9yQjoKICAgICByZXR1cm4gKCgodmVjdG9yQSB8IFNQQUNJTkdfQklUUykgLSB2ZWN0b3JCKSAmIFNQQUNJTkdfQklUUykgPT0gU1BBQ0lOR19CSVRTOwp9CgppbnQgY29tcGFyZShpbnQgdmVjdG9yQSwgaW50IHZlY3RvckIpCnsKICAgIGlmKHZlY3RvckRvbWluYXRlcyh2ZWN0b3JBLCB2ZWN0b3JCKSkKICAgICAgICByZXR1cm4gMTsKICAgIGVsc2UgaWYodmVjdG9yRG9taW5hdGVzKHZlY3RvckIsIHZlY3RvckEpKQogICAgICAgIHJldHVybiAtMTsKICAgIHJldHVybiAwOwp9CgppbnQgbWFpbih2b2lkKSB7CglpbnQgdjEgPSBjcmVhdGVWZWN0b3IoMTAsIDQsIDEyLCA1KTsKCWludCB2MiA9IGNyZWF0ZVZlY3Rvcig5LCAzLCAxMCwgNSk7CglpbnQgdjMgPSBjcmVhdGVWZWN0b3IoMywgOSwgMTAsIDUpOwoJCglwcmludGYoInYxIGRvbWluYXRlcyB2MiAlc1xuIiwgdmVjdG9yRG9taW5hdGVzKHYxLCB2MikgPyAieWVzIiA6ICJubyIpOwoJcHJpbnRmKCJ2MiBkb21pbmF0ZXMgdjEgJXNcbiIsIHZlY3RvckRvbWluYXRlcyh2MiwgdjEpID8gInllcyIgOiAibm8iKTsKCXByaW50ZigidjIgZG9taW5hdGVzIHYzICVzXG4iLCB2ZWN0b3JEb21pbmF0ZXModjIsIHYzKSA/ICJ5ZXMiIDogIm5vIik7CglwcmludGYoInYzIGRvbWluYXRlcyB2MiAlc1xuIiwgdmVjdG9yRG9taW5hdGVzKHYzLCB2MikgPyAieWVzIiA6ICJubyIpOwoJCglyZXR1cm4gMDsKfQo=