前言

  • 第一次交文件……
  • 先叙述一下我的没脸的行为:
  • T1我的freopen写错了。网站成绩一出后我发现我FE了。
  • 然后非常震惊的我飞快的改了freopen交到网站上去,AC了。
  • 我痛心疾首心想就当是一次教训吧。
  • 结果吃完饭回来公布考试成绩:我AC了!!
  • 好像是收卷收晚了我当时已经改了然后收上去是对的?heiheihei。
  • T2我还看错题了我修改的是原序列但是我也AC了(kx&skyh也看错了WA70)!!heiheihei。
  • 总之这是非常没脸的骗到了130分。

T1

  • 其实出题人太善良了,我认为这个题的N和T应该开到1e7的。
  • 我的方法是用$\Theta(NlogN)$的时间复杂度内预处理出所有答案然后$\Theta(T)$回答所有询问。
  • 设a[i]为满足$x^i>i!$的最小x,显然a[i]随i的增大单调不降。
  • 利用double存下倍数并用快速幂实现快速转移就行了。
  • 时间复杂度$\Theta(NlogN)$,空间复杂度$\Theta(N)$。
#include<cstdio>
int const lt=1e5;
double const o=1.0,eps=1e-9;
int n;
int a[lt|1];
double la;
inline double power(double x,int y){
    double as=1;
    for(;y;y>>=1,x=x*x)
        if(y&1)as=as*x;
    return as;
}
int main(){
    freopen("yuuutsu.in","r",stdin);
    freopen("yuuutsu.out","w",stdout);
    a[1]=2;
    la=2;
    for(register int i=2;i<=lt;++i){
        a[i]=a[i-1];
        la*=(double)a[i]/(double)i;
        while(la-o<eps)
            ++a[i],la*=power((double)a[i]/(double)(a[i]-1),i);
    }
    int T,x,y;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&x,&y);
        puts(x<a[y]?"Yes":"No");
    }
    return 0;
}
View Code

相关文章:

猜你喜欢
  • 2021-12-31
  • 2021-05-12
相关资源
相似解决方案