ACM模版

描述

题解

预处理出来所有情况下最大能够构成的面积,然后二分即可。

代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int MAXN = 1e5 + 10;

double n;
double ans[MAXN];

void init()
{
    for (int i = 4 ; i <= MAXN; i++)
    {
        if (i % 4 == 0)
        {
            ans[i] = (i / 4) * (i / 4) * 2;
        }
        else if ((i - 1) % 4 == 0)
        {
            ans[i] = ans[i - 1] + (i / 4 - 1) + 0.5;
        }
        else
        {
            ans[i] = ans[i - 1] + (i / 4 - 1) + 1.5;
        }
    }
}

int main()
{
    init();

    int T;
    scanf("%d", &T);

    while (T--)
    {
        scanf("%lf", &n);
        int pos = (int)(lower_bound(ans + 4, ans + MAXN - 1, n) - ans);
        printf("%d\n", pos);
    }

    return 0;
}