#include "cielib.h" int d,k,r; int ask(int pozycja[]) { k--; //printf("ask: %d %d\n", pozycja[0], pozycja[1]); return czyCieplo(pozycja); } int main() { d = podajD(); k = podajK(); r = podajR(); int l[d]; int u[d]; int query[d]; for (int i=0; i<d; i++){ l[i] = 0; u[i] = r; } int it = 0; int skipped = 0; while (true){ if (skipped >= d) break; if (u[it] == l[it]) { skipped++; it++; continue; } skipped = 0; /* for (int i=0; i<d; i++){ printf("%d %d %d", i, l[i], u[i]); if (i==it) printf("*"); printf("\n"); } printf("\n\n"); */ for (int i=0; i<d; i++){ query[i] = (l[i] + u[i])/2; } if (u[it] - l[it] > 2) { query[it] = l[it]; ask(query); query[it] = u[it]; int r = ask(query); if (r) { l[it] = (l[it] + u[it] )/2; } else { u[it] = (l[it] + u[it] +1)/2; } } else { if (u[it] - 1 == l[it]){ if (l[it] != 0) l[it]--; else u[it]++; } query[it] = l[it]; ask(query); query[it] = u[it]; int r = ask(query); if (r) { l[it] = u[it]; } else { query[it] = l[it]; r = ask(query); if (r) u[it] = l[it]; else u[it] = l[it] = (u[it] + l[it])/2; } } it = (it + 1)%d; } znalazlem(l); }
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 | #include "cielib.h" int d,k,r; int ask(int pozycja[]) { k--; //printf("ask: %d %d\n", pozycja[0], pozycja[1]); return czyCieplo(pozycja); } int main() { d = podajD(); k = podajK(); r = podajR(); int l[d]; int u[d]; int query[d]; for (int i=0; i<d; i++){ l[i] = 0; u[i] = r; } int it = 0; int skipped = 0; while (true){ if (skipped >= d) break; if (u[it] == l[it]) { skipped++; it++; continue; } skipped = 0; /* for (int i=0; i<d; i++){ printf("%d %d %d", i, l[i], u[i]); if (i==it) printf("*"); printf("\n"); } printf("\n\n"); */ for (int i=0; i<d; i++){ query[i] = (l[i] + u[i])/2; } if (u[it] - l[it] > 2) { query[it] = l[it]; ask(query); query[it] = u[it]; int r = ask(query); if (r) { l[it] = (l[it] + u[it] )/2; } else { u[it] = (l[it] + u[it] +1)/2; } } else { if (u[it] - 1 == l[it]){ if (l[it] != 0) l[it]--; else u[it]++; } query[it] = l[it]; ask(query); query[it] = u[it]; int r = ask(query); if (r) { l[it] = u[it]; } else { query[it] = l[it]; r = ask(query); if (r) u[it] = l[it]; else u[it] = l[it] = (u[it] + l[it])/2; } } it = (it + 1)%d; } znalazlem(l); } |