SNSEQ - Dãy số

Tác giả: RR

Ngôn ngữ: C++

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <string>
#include <deque>
#include <complex>

#define FOR(i,a,b) for(int i=(a),_b=(b); i<=_b; i++)
#define FORD(i,a,b) for(int i=(a),_b=(b); i>=_b; i--)
#define REP(i,a) for(int i=0,_a=(a); i<_a; i++)
#define ll long long
#define F first
#define S second
#define PB push_back
#define MP make_pair
using namespace std;

const double PI = acos(-1.0);
const double eps = 1e-4;

int n;
double a[1011], b[1011];

bool check(double x) {
    a[n] = x;
    double sumb = a[n] - a[1];
    b[2] = (sumb - (n-1) * (n-2)) / (double) (n-1);
    FOR(i,3,n) b[i] = b[i-1] + 2;
    FOR(i,2,n-1) a[i] = a[i-1] + b[i];
    
    FOR(i,1,n) if (a[i] < -1e-6) return false;
    return true;
}

int main() {
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
    cin >> n >> a[1];
    double l = 0.0, r = 1e12, res = r;
    while (l + eps < r) {
        double mid = (l + r) / 2.0;
        if (check(mid)) {
            res = mid;
            r = mid - eps;
        }
        else l = mid + eps;
    }
    printf("%.2lf\n", res);
    return 0;
}

Download