#include "cielib.h"
#include <bits/stdc++.h>
#define czy czyCieplo
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define l_bnd lower_bound
#define u_bnd upper_bound
using namespace std;
int main() {
int d = podajD();
int z=podajK();
int r=podajR();
int p[d], k[d], s[d];
set <pair <int, int> > maksr;
for(int i=0; i<d; i++)
{
p[i]=0;
k[i]=r;
s[i]=r/2;
maksr.insert(mp(-r, i));
}
pair <int, int> akt=*maksr.l_bnd(mp(-1000000000, 0));
while(akt.f<0)
{
/* for(int i=0; i<d; i++)
{
cout<<i<<" "<<p[i]<<" "<<s[i]<<" "<<k[i]<<endl;
}*/
if(akt.f==-1)
{
if(p[akt.s]>0)
{
s[akt.s]=p[akt.s]-1;
czy(s);
s[akt.s]=k[akt.s];
int c=czy(s);
if(c==1)
{
p[akt.s]=k[akt.s];
}
else
{
k[akt.s]=p[akt.s];
}
}
else
{
s[akt.s]=k[akt.s]+1;
czy(s);
s[akt.s]=p[akt.s];
int c=czy(s);
if(c==1)
{
k[akt.s]=p[akt.s];
}
else
{
p[akt.s]=k[akt.s];
}
}
s[akt.s]=(p[akt.s]+k[akt.s])/2;
maksr.erase(akt);
maksr.insert(mp(p[akt.s]-k[akt.s], akt.s));
akt=*maksr.l_bnd(mp(-1000000000, 0));
}
else
{
s[akt.s]=p[akt.s];
czy(s);
s[akt.s]=k[akt.s];
int c1=czy(s);
s[akt.s]=p[akt.s];
int c2=czy(s);
s[akt.s]=(k[akt.s]+p[akt.s])/2;
if(c1==1)
{
p[akt.s]=s[akt.s];
}
if(c2==1)
{
k[akt.s]=s[akt.s];
}
if(c1==0 && c2==0)
{
p[akt.s]=(p[akt.s]+s[akt.s])/2;
k[akt.s]=(k[akt.s]+s[akt.s])/2;
}
s[akt.s]=(k[akt.s]+p[akt.s])/2;
maksr.erase(akt);
maksr.insert(mp(p[akt.s]-k[akt.s], akt.s));
akt=*maksr.l_bnd(mp(-1000000000, 0));
}
}
/*for(int i=0; i<d; i++)
{
cout<<i<<" "<<p[i]<<" "<<s[i]<<" "<<k[i]<<endl;
}*/
znalazlem(s);
}
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 | #include "cielib.h" #include <bits/stdc++.h> #define czy czyCieplo #define f first #define s second #define pb push_back #define mp make_pair #define l_bnd lower_bound #define u_bnd upper_bound using namespace std; int main() { int d = podajD(); int z=podajK(); int r=podajR(); int p[d], k[d], s[d]; set <pair <int, int> > maksr; for(int i=0; i<d; i++) { p[i]=0; k[i]=r; s[i]=r/2; maksr.insert(mp(-r, i)); } pair <int, int> akt=*maksr.l_bnd(mp(-1000000000, 0)); while(akt.f<0) { /* for(int i=0; i<d; i++) { cout<<i<<" "<<p[i]<<" "<<s[i]<<" "<<k[i]<<endl; }*/ if(akt.f==-1) { if(p[akt.s]>0) { s[akt.s]=p[akt.s]-1; czy(s); s[akt.s]=k[akt.s]; int c=czy(s); if(c==1) { p[akt.s]=k[akt.s]; } else { k[akt.s]=p[akt.s]; } } else { s[akt.s]=k[akt.s]+1; czy(s); s[akt.s]=p[akt.s]; int c=czy(s); if(c==1) { k[akt.s]=p[akt.s]; } else { p[akt.s]=k[akt.s]; } } s[akt.s]=(p[akt.s]+k[akt.s])/2; maksr.erase(akt); maksr.insert(mp(p[akt.s]-k[akt.s], akt.s)); akt=*maksr.l_bnd(mp(-1000000000, 0)); } else { s[akt.s]=p[akt.s]; czy(s); s[akt.s]=k[akt.s]; int c1=czy(s); s[akt.s]=p[akt.s]; int c2=czy(s); s[akt.s]=(k[akt.s]+p[akt.s])/2; if(c1==1) { p[akt.s]=s[akt.s]; } if(c2==1) { k[akt.s]=s[akt.s]; } if(c1==0 && c2==0) { p[akt.s]=(p[akt.s]+s[akt.s])/2; k[akt.s]=(k[akt.s]+s[akt.s])/2; } s[akt.s]=(k[akt.s]+p[akt.s])/2; maksr.erase(akt); maksr.insert(mp(p[akt.s]-k[akt.s], akt.s)); akt=*maksr.l_bnd(mp(-1000000000, 0)); } } /*for(int i=0; i<d; i++) { cout<<i<<" "<<p[i]<<" "<<s[i]<<" "<<k[i]<<endl; }*/ znalazlem(s); } |
English