前言
- 第一次交文件……
- 先叙述一下我的没脸的行为:
- 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; }