SNSEQ - Dãy số

Tác giả: ll931110

Ngôn ngữ: C++

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iostream>
#include <iterator>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <vector>
typedef long long ll;
using namespace std;

double a[1010],ret;
int n;

bool ok(double med)
{
     a[n] = med;
     double delta = ((a[1] - a[n]) + (n - 2) * (n - 1) * 1.0) / (n - 1) * 1.0;
     bool chk = true;
     for (int i = 2; i <= n; i++)
     {
         a[i] = a[i - 1] - delta;
         if (a[i] < 0) chk = false;
         delta -= 2.0;
     };
     if (chk) ret = med;
     return chk;
};

int main()
{
//    freopen("seq.in","r",stdin);
//    freopen("seq.ou","w",stdout);
    scanf("%d %lf", &n, &a[1]);
    double inf = 0.0,sup = 1e12;
    for (int i = 0; i < 70; i++)
    {
        double med = (inf + sup)/2;
        if (ok(med)) sup = med; else inf = med;
    };
    printf("%.2lf\n", ret);
};

Download