Трасса для испытания робота содержит участок, изображенный на рисунке. Радиус каждого поворота 100 см. Диаметр колеса трехколесной базы робота равен 5 см. Определить разницу между расстояниями, которое правое и левое колесо робота, если расстояние между их центрами равно 10 см.
max = a[0]+a[n-1]; min = a[0]*a[n/2]; for (int i = 1; i<n/2; i++){ if (a[i]+a[n-i-1] > max) max = a[i]+a[n-i-1]; if (a[i]*a[n/2+i] < min) min = a[i]*a[n/2+i]; } cout << "max = " << max << "\n"; cout << "min = " << min << "\n"; return 0; }
Пример (для n=10): -19.29 30.99 -15.37 26.41 3.65 13.45 29.28 4.28 30.51 -10.36 max = 61.50 min = -259.43
#include <iostream>
typedef long long ll;
using namespace std;
bool ll_is_valid(ll t, ll N, ll x, ll y)
{
return t / x + (t - x) / y >= N;
}
ll f(ll N, ll x, ll y)
{
ll R = 1;
while (!ll_is_valid(R,N,x,y)) R *= 2;
ll L = R / 2;
while(R - L > 1)
{
ll M = (L + R) / 2;
if (!ll_is_valid(M,N,x,y)) {L = M;}
else {R = M;}
}
return R;
}
int main()
{
ll N,x,y;
cin >> N >> x >> y;
if(x > y) swap( x, y );
cout << f(N, x, y) << std::endl;
}
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
const int n = 30;
double a[n];
double max, min;
srand(time(0));
for (int i = 0; i < n; i++) {
a[i]=-20 + (51.0 / RAND_MAX) * rand();
cout << fixed << setw (7) << setprecision (2) << a[i];
}
cout <<"\n";
max = a[0]+a[n-1];
min = a[0]*a[n/2];
for (int i = 1; i<n/2; i++){
if (a[i]+a[n-i-1] > max) max = a[i]+a[n-i-1];
if (a[i]*a[n/2+i] < min) min = a[i]*a[n/2+i];
}
cout << "max = " << max << "\n";
cout << "min = " << min << "\n";
return 0;
}
Пример (для n=10):
-19.29 30.99 -15.37 26.41 3.65 13.45 29.28 4.28 30.51 -10.36
max = 61.50
min = -259.43