#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); } |
English