#include <bits/stdc++.h> #include <tuple> #include "cielib.h" #define mt(a, b) make_tuple(a, b) #define e(a, b) get<a>(b); using namespace std; set<tuple<int, int> > kopiec; int main() { //ios_base::sync_with_stdio(0); //cin.tie(0); int d=podajD(), k=podajK(), r=podajR(); int pozycja[d]; int pozycja2[d]; int dol[d]; int gora[d]; for (int i=0; i<d; i++) { dol[i]=0; gora[i]=r; pozycja[i]=r/2; kopiec.insert(mt(r+1, i)); } for (;kopiec.size();) { int s=e(1,*(kopiec.rbegin())); kopiec.erase(*(kopiec.rbegin())); if (gora[s]-dol[s]==2) { pozycja[s]=gora[s]; czyCieplo(pozycja); pozycja[s]=dol[s]; bool pom1=czyCieplo(pozycja); pozycja[s]=gora[s]; bool pom2=czyCieplo(pozycja); if (!pom1 && !pom2) { gora[s]=dol[s]=dol[s]+1; } else if (pom1) { gora[s]=dol[s]; } else { dol[s]=gora[s]; } pozycja[s]=dol[s]; continue; } pozycja[s]=gora[s]; czyCieplo(pozycja); pozycja[s]=dol[s]; bool pom1=czyCieplo(pozycja); if (pom1) gora[s]=(gora[s]+dol[s])/2+1; else dol[s]=(gora[s]+dol[s])/2; kopiec.insert(mt(gora[s]-dol[s],s)); pozycja[s]=(gora[s]+dol[s])/2; } znalazlem(pozycja); }
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 | #include <bits/stdc++.h> #include <tuple> #include "cielib.h" #define mt(a, b) make_tuple(a, b) #define e(a, b) get<a>(b); using namespace std; set<tuple<int, int> > kopiec; int main() { //ios_base::sync_with_stdio(0); //cin.tie(0); int d=podajD(), k=podajK(), r=podajR(); int pozycja[d]; int pozycja2[d]; int dol[d]; int gora[d]; for (int i=0; i<d; i++) { dol[i]=0; gora[i]=r; pozycja[i]=r/2; kopiec.insert(mt(r+1, i)); } for (;kopiec.size();) { int s=e(1,*(kopiec.rbegin())); kopiec.erase(*(kopiec.rbegin())); if (gora[s]-dol[s]==2) { pozycja[s]=gora[s]; czyCieplo(pozycja); pozycja[s]=dol[s]; bool pom1=czyCieplo(pozycja); pozycja[s]=gora[s]; bool pom2=czyCieplo(pozycja); if (!pom1 && !pom2) { gora[s]=dol[s]=dol[s]+1; } else if (pom1) { gora[s]=dol[s]; } else { dol[s]=gora[s]; } pozycja[s]=dol[s]; continue; } pozycja[s]=gora[s]; czyCieplo(pozycja); pozycja[s]=dol[s]; bool pom1=czyCieplo(pozycja); if (pom1) gora[s]=(gora[s]+dol[s])/2+1; else dol[s]=(gora[s]+dol[s])/2; kopiec.insert(mt(gora[s]-dol[s],s)); pozycja[s]=(gora[s]+dol[s])/2; } znalazlem(pozycja); } |