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