// Ciepło-zimno [B].cpp : Defines the entry point for the console application. // #include <cstdio> #include "cielib.h" #define MAX_D 500 struct przedzial { int p, k; }; void solutionThree(int d, int *ans,przedzial *przed) //r==3 { for (int i = 0; i < d; ++i) { if (przed[i].k - przed[i].p + 1 < 3) { if (przed[i].p == 0)przed[i].k+=1; else przed[i].p--; } } for (int i = 0; i < d; ++i) { ans[i] = (przed[i].p + przed[i].k) / 2; } czyCieplo(ans); for (int i = 0; i < d; ++i) { czyCieplo(ans); ans[i] = przed[i].p; if (!czyCieplo(ans)) { ans[i] = przed[i].k; if (!czyCieplo(ans)) { ans[i] = przed[i].p; if (!czyCieplo(ans)) ans[i] = (przed[i].k + przed[i].p) / 2; } } } } void solution(int d,int r,int *ans) { przedzial przed[MAX_D]; for (int i = 0; i < d; ++i) { ans[i] = r / 2; przed[i].p = 0; przed[i].k = r; } if (r == 2) { solutionThree(d, ans,przed); return; } czyCieplo(ans); bool moreThree = true; while (moreThree) { moreThree = false; for (int i = 0; i < d; ++i) { int sr = (przed[i].k + przed[i].p )/2; if (przed[i].k-przed[i].p+1 > 3) { moreThree = true; ans[i] = sr; czyCieplo(ans); ans[i] = przed[i].k; if(czyCieplo(ans)) { przed[i].p = sr; } else { ans[i] = przed[i].p; if(czyCieplo(ans)) { przed[i].k = sr; if ((przed[i].k + przed[i].p) % 2 == 0)przed[i].k++; }else { przed[i].p = sr; } } ans[i] = (przed[i].k+przed[i].p)/2; } } } solutionThree(d, ans,przed); } int main() { int ans[MAX_D]; int d,r,k; d=podajD(); r = podajR(); k = podajK(); solution(d, r, ans); znalazlem(ans); //return 0; /*while (true) { nextTest(); d = podajD(); r = podajR(); k = podajK(); solution(d, r, ans); znalazlem(ans); }*/ 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 109 110 111 112 113 114 115 116 117 118 119 | // Ciepło-zimno [B].cpp : Defines the entry point for the console application. // #include <cstdio> #include "cielib.h" #define MAX_D 500 struct przedzial { int p, k; }; void solutionThree(int d, int *ans,przedzial *przed) //r==3 { for (int i = 0; i < d; ++i) { if (przed[i].k - przed[i].p + 1 < 3) { if (przed[i].p == 0)przed[i].k+=1; else przed[i].p--; } } for (int i = 0; i < d; ++i) { ans[i] = (przed[i].p + przed[i].k) / 2; } czyCieplo(ans); for (int i = 0; i < d; ++i) { czyCieplo(ans); ans[i] = przed[i].p; if (!czyCieplo(ans)) { ans[i] = przed[i].k; if (!czyCieplo(ans)) { ans[i] = przed[i].p; if (!czyCieplo(ans)) ans[i] = (przed[i].k + przed[i].p) / 2; } } } } void solution(int d,int r,int *ans) { przedzial przed[MAX_D]; for (int i = 0; i < d; ++i) { ans[i] = r / 2; przed[i].p = 0; przed[i].k = r; } if (r == 2) { solutionThree(d, ans,przed); return; } czyCieplo(ans); bool moreThree = true; while (moreThree) { moreThree = false; for (int i = 0; i < d; ++i) { int sr = (przed[i].k + przed[i].p )/2; if (przed[i].k-przed[i].p+1 > 3) { moreThree = true; ans[i] = sr; czyCieplo(ans); ans[i] = przed[i].k; if(czyCieplo(ans)) { przed[i].p = sr; } else { ans[i] = przed[i].p; if(czyCieplo(ans)) { przed[i].k = sr; if ((przed[i].k + przed[i].p) % 2 == 0)przed[i].k++; }else { przed[i].p = sr; } } ans[i] = (przed[i].k+przed[i].p)/2; } } } solutionThree(d, ans,przed); } int main() { int ans[MAX_D]; int d,r,k; d=podajD(); r = podajR(); k = podajK(); solution(d, r, ans); znalazlem(ans); //return 0; /*while (true) { nextTest(); d = podajD(); r = podajR(); k = podajK(); solution(d, r, ans); znalazlem(ans); }*/ return 0; } |