Informatică, întrebare adresată de 100pct, 8 ani în urmă

va rog frumos sa ma ajutati cu urmatoarea problema, o incerc de ceva timp dar primesc doar 50 de pct:
Aveti detalii in poze:

problema - #2419 Intalnire

Cerința

Doi prieteni se afla pe axa Ox, in puncte cu coordonate întregi. Primul se află în punctul x1 = a, iar al doilea se află în punctul x2 = b. Fiecare se poate mișca cu o poziție, la stânga sau la dreapta, de un număr nelimitat de ori. Când se mișcă, oboseala se modifică după următoarea regulă: la prima mișcare oboseala crește cu 1, la a doua mișcare oboseala crește cu 2, la a treia cu 3 și asa mai departe. De exemplu, dacă un prieten se mișcă mai întâi la stânga, apoi la dreapta, și apoi iar la stânga, oboseala lui devine 1 + 2 + 3 = 6.

Prietenii vor să se întâlnească într-un punct cu coordonata număr întreg. Aflați oboseala totală minimă pe care cei doi cei doi o vor acumula.

Anexe:

100pct: rezolvarea mea:
100pct: #include

using namespace std;
int a,b,ob1=0,ob2=0,obt,aux,distanta,i;

int main()
{
cin>>a>>b;
if(a>b)
{
aux=a;
a=b;
b=aux;
}
if(b-a==1)
obt=1;
distanta=b-a;
if(distanta%2==0){ //daca distanta e para o impartim in 2
a=distanta/2;
for(i=0;i<=a;i++)
ob1+=i;
obt=2*ob1;
}
if(distanta/2!=0){
a=distanta/2;
b=distanta/2 + 1;
for(i=0;i<=a;i++)
ob1+=i;
for(i=0;i<=b;i++)
ob2+=i;
obt=ob1+ob2;
}
cout< return 0;
}

Răspunsuri la întrebare

Răspuns de boiustef
4

#include <iostream>

using namespace std;

long long a,b,s,dif,s1,s2, mij;

int main()

{

   cin >> a >> b;

   if (a>b) dif=a-b;

   else dif=b-a;

    mij=dif/2;

    if (mij%2==0) s1=(mij/2)*(1+mij);

     else s1=mij*((1+mij)/2);

   if (dif%2==0)

   {

     s=2*s1;

   }

   else

   {

       if ((mij+1)%2==0) s2=((mij+1)/2)*(2+mij);

       else s2=((2+mij)/2)*(mij+1);

       s=s1+s2;

   }

   cout << s;

}


100pct: iti multumesc mult !
boiustef: cu plăcere
Alte întrebări interesante