4-variable-simplifier/spikes/kattis-add.c

94 lines
2.1 KiB
C

#include <stdbool.h>
#include <assert.h>
#include <assert.h>
#include <stdio.h>
#define N(array) (sizeof(array) / sizeof(*array))
// 0 1 2 3 4 5 6 7 8 9
int a[10] = { 2, 4, 5, 7, 9, 11, 15, 17, 17, 19};
int b[10] = {10, 11, 11, 14, 14, 19, 20, 23, 26, 29};
int c[20] = {
15, 17, 19, 21, 22, 25, 26, 26, 27, 32,
33, 33, 36, 39, 42, 44, 48, 49, 49, 49
};
// [ 0] [ 1] [ 2] [ 3] [ 4] [ 5] [ 6] [ 7] [ 8] [ 9]
// 2 4 5 7 9 11 15 17 17 19
// --------------------------------------------------
// [ 0] 10 | 12 14 15 (17) 19 21 25 27 27 29
// [ 1] 11 | 13 15 16 28 20 22 26 28 28 30
// [ 2] 11 | 13 (15) 16 18 20 22 26 28 28 30
// [ 3] 14 | 16 18 19 21 23 25 29 31 31 33
// [ 4] 14 | 16 18 (19) 21 23 25 29 31 31 33
// [ 5] 19 |(21) 23 24 (26) 28 30 34 36 36 38
// [ 6] 20 |(22) 24 25 27 29 31 38 40 40 (42)
// [ 7] 23 |(25) (27) 28 30 32 34 38 40 40 (42)
// [ 8] 26 | 28 30 31 33 35 37 41 43 43 45
// [ 9] 29 | 31 (33) 34 (36) 38 40 (44) 46 46 (48)
int main()
{
puts("hello, world!");
for (int ci = 0; ci < 20; ci++)
{
int goal = c[ci];
int ai = 0, bi = 9;
while (1)
{
int sum = a[ai] + b[bi];
if (sum < goal)
{
ai++;
if (ai == 10)
break;
}
else if (sum > goal)
{
if (bi == 0)
break;
bi--;
}
else
{
assert(a[ai] + b[bi] == c[ci]);
printf("a[%2i] + b[%2i] == c[%2i] "
"(%2i + %2i == %2i)\n",
ai, bi, ci, a[ai], b[bi], c[ci]);
break;
}
}
}
return 0;
}