#include <stdio.h> #include <time.h> #include <algorithm> #include "cielib.h" using namespace std; int d, k, r; int lewy[500]; int prawy[500]; int znalezione = 0; int zapytanie[500]; int zapytanie_pre[500]; int zakresL, zakresP; int kand1, kand2; int schw1, schw2, schw3; int odpowiedz[500]; int wykorzystane = 0; int main() { srand(time(0)); d = podajD(); k = podajK(); r = podajR(); for(int i = 0; i < d; i++) prawy[i] = r; while(znalezione < d) { for(int i = 0; i < d; i++) { zapytanie[i] = (lewy[i]+prawy[i])/2; zapytanie_pre[i] = (lewy[i]+prawy[i])/2; } for(int i = 0; i < d; i++) { if(lewy[i] == prawy[i]) continue; zakresL = lewy[i]; zakresP = prawy[i]; kand1 = ((abs(rand()*rand()))%(zakresP-zakresL+1))+zakresL; kand2 = ((abs(rand()*rand()*rand()))%(zakresP-zakresL+1))+zakresL; if(kand1 == kand2) continue; if(kand1 > kand2) swap(kand1, kand2); zapytanie[i] = kand1; schw1 = czyCieplo(zapytanie); wykorzystane++; zapytanie[i] = kand2; schw2 = czyCieplo(zapytanie); wykorzystane++; zapytanie[i] = kand1; schw3 = czyCieplo(zapytanie); wykorzystane++; if(schw2 == 1) zakresL = kand1; else if(schw3 == 1) zakresP = kand2; else { zapytanie[i] = zakresL; schw1 = czyCieplo(zapytanie); wykorzystane++; zapytanie[i] = zakresP; schw2 = czyCieplo(zapytanie); wykorzystane++; zapytanie[i] = zakresL; schw3 = czyCieplo(zapytanie); wykorzystane++; if(schw2 == 1) zakresL += 1; else if(schw3 == 1) zakresP -= 1; } zapytanie[i] = zapytanie_pre[i]; lewy[i] = zakresL; prawy[i] = zakresP; if(zakresL == zakresP) { lewy[i] = zakresL; prawy[i] = zakresP; znalezione++; } if(wykorzystane+6 >= k) break; } if(wykorzystane+6 >= k) break; } for(int i = 0; i < d; i++) { if(prawy[i]-lewy[i] == 1 && prawy[i] == r) odpowiedz[i] = r; else odpowiedz[i] = (lewy[i]+prawy[i])/2; } znalazlem(odpowiedz); return 0; }
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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #include <stdio.h> #include <time.h> #include <algorithm> #include "cielib.h" using namespace std; int d, k, r; int lewy[500]; int prawy[500]; int znalezione = 0; int zapytanie[500]; int zapytanie_pre[500]; int zakresL, zakresP; int kand1, kand2; int schw1, schw2, schw3; int odpowiedz[500]; int wykorzystane = 0; int main() { srand(time(0)); d = podajD(); k = podajK(); r = podajR(); for(int i = 0; i < d; i++) prawy[i] = r; while(znalezione < d) { for(int i = 0; i < d; i++) { zapytanie[i] = (lewy[i]+prawy[i])/2; zapytanie_pre[i] = (lewy[i]+prawy[i])/2; } for(int i = 0; i < d; i++) { if(lewy[i] == prawy[i]) continue; zakresL = lewy[i]; zakresP = prawy[i]; kand1 = ((abs(rand()*rand()))%(zakresP-zakresL+1))+zakresL; kand2 = ((abs(rand()*rand()*rand()))%(zakresP-zakresL+1))+zakresL; if(kand1 == kand2) continue; if(kand1 > kand2) swap(kand1, kand2); zapytanie[i] = kand1; schw1 = czyCieplo(zapytanie); wykorzystane++; zapytanie[i] = kand2; schw2 = czyCieplo(zapytanie); wykorzystane++; zapytanie[i] = kand1; schw3 = czyCieplo(zapytanie); wykorzystane++; if(schw2 == 1) zakresL = kand1; else if(schw3 == 1) zakresP = kand2; else { zapytanie[i] = zakresL; schw1 = czyCieplo(zapytanie); wykorzystane++; zapytanie[i] = zakresP; schw2 = czyCieplo(zapytanie); wykorzystane++; zapytanie[i] = zakresL; schw3 = czyCieplo(zapytanie); wykorzystane++; if(schw2 == 1) zakresL += 1; else if(schw3 == 1) zakresP -= 1; } zapytanie[i] = zapytanie_pre[i]; lewy[i] = zakresL; prawy[i] = zakresP; if(zakresL == zakresP) { lewy[i] = zakresL; prawy[i] = zakresP; znalezione++; } if(wykorzystane+6 >= k) break; } if(wykorzystane+6 >= k) break; } for(int i = 0; i < d; i++) { if(prawy[i]-lewy[i] == 1 && prawy[i] == r) odpowiedz[i] = r; else odpowiedz[i] = (lewy[i]+prawy[i])/2; } znalazlem(odpowiedz); return 0; } |