MnZn求助
  • 板块学术版
  • 楼主btng_smith666
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/7 22:35
  • 上次更新2023/10/27 08:14:17
查看原帖
MnZn求助
149983
btng_smith666楼主2022/10/7 22:35

求助这个题,Sub4不知为何WA一个点

#include<bits/stdc++.h>
#include<stdio.h>
#define ll long long
#define ull unsigned long long
#define pl puts("")
#define pc putchar(' ')
using namespace std;
ll read()
{
    ll x=0;
    int f=1;
    char c=getchar();
    while(!isdigit(c))
    {
        if(c=='-')
            f=-1;
        c=getchar();
    }
    while(isdigit(c))
        x=(x<<1)+(x<<3)+c-'0',c=getchar();
    return x*f;
}
char buf_ans[114];
ll next_n(double last_ans=0,ll get_n=0)
{
    sprintf(buf_ans,"%.6f",last_ans);
    for(ll i=0,x=0;;i++)
    {
        if(buf_ans[i]=='.')
            return get_n^x;
        if(i&1)
            x*=10;
        else
            x=x*10+(buf_ans[i]^48);
    }
}
ll t,n,m;
double ans;
long long qwq(int i)
{
    return floor((i+0.5)*(i+0.5)*(i+0.5)*(i+0.5));
}
map<int,double> mp;
void init()
{
    for(int i=1;i<=5;i++)
        mp[i]=i;
    for(int i=6;i<=39;i++)
        mp[i]=mp[i-1]+0.5;
}
long long sum[31666];
int main()
{
    t=read();
    for(int i=1;i<=31623;i++)
        sum[i]=sum[i-1]+floor((qwq(i)-qwq(i-1))*1.0/i);
    init();
    while(t--)
    {
        n=next_n(ans,read());
        if(n<=39)
        {
            ans=mp[n];
            if(ans==9)
                ans=3;
            printf("%.6lf\n",ans);
            continue;
        }
        for(int i=2;i<=31623;i++)
            if(n>=qwq(i-1)&&n<qwq(i))
                ans=sum[i-1]+(n-qwq(i-1))*1.0/i;
        if(ans==9)
            ans=3;
        printf("%.6lf\n",ans);
    }
    return 0;
}
2022/10/7 22:35
加载中...