CF 273 div2 - Task C

Link zadatka: http://codeforces.com/contest/478/problem/C

Da li neko moze da mi pomogne oko ovog zadatka. Zasto je resenje min(sum/3,a[0]+a[1])?
/// sortiran niz a[] ///
Ako je a[0]+a[1]<=a[2] onda je resenje a[0]+a[1] , to je OK , prakticno uzimamo 1 boju iz a[0] ili a[1] i 2 (iste boje, naravno) iz a[2].
Ne mogu da nadjem zasto je resenje (a[0]+a[1]+a[2])/3 kada je a[0]+a[1]>a[2]. Moze mala pomoc :slight_smile: ?

Ovo je moje misljenje, vrlo moguce netacno :slight_smile:
Tezi se da se upotrebi sto vise balona. To se postize ako podelimo sumu na 3 jer toliko je balona po stolu. Medjutim, ukoliko su a1 + a0 <= 0.5 a2, mozemo uracunati mogucnost gde su tri jednaka balona na stolu(jer bismo uzeli po dva iz a2 za svaki iz a1 i a0, a kako je zbir a1 i a0 manji od a2*0.5, moze nam ostati u a2 tri ili vise balona sto ce algoritam videti kao mogucnost), ali to po tekstu zadatka nije ispravna mogucnost. Zato u tom slucaju uzimamo jedan iz manjih, i po dva iz a2.
To radimo ako je a0 + a2 <= s/3, jer iz toga sledi da a0 + a1 ce biti <= i od a2/2. Obrnuto, ako je s/3 manje,necemo moci da sa zbirom dveju manjih broja uracunamo neprihvatljive mogucnosti, pa je resenje s/3;
Nejednacina : a0+a1 <= s/3
3a0 +3a1 <= a1 + a2 +a0
2(a1+a0) <= a2
a0+a1 <= a2/2

Ovo je moje resenje u c++ ali razumeces:
#include
using namespace std;
int main(){
int r,g,b,s,prolaz=0;
cin>>r>>g>>b;
s=r+g+b;
int t=0;
if(r>0&&g>0&&b>0){
while(1){
if(s>=3){
r=r-1;
g=g-1;
b=b-1;
s=r+g+b;
t++;
}
else{
break;
}
}
}
cout<<t;
return 0;
}

Test primer: 2 2 12
Tvoj rezultat je 5, tacan rezultat je 4