随机跳题跳到这道已经做过的入门题,回忆提交记录,却发现当时只知道int
炸了就开long long
,却不知道什么是 64 位无符号整数。
现在回想起来,或许,就是因为这道题把我没开long long
的提交放过去了,我2019年Day1T1才会被扣掉那5分。
为了避免之后的人犯和我一样的错误,我希望加入两组Hack:
输入1:
0 11451419198101919810
输出1:
1
输入2:
9 19
输出2:
10000000000000000000
实际意义:假设这个禽兽得了传染病后立即隔离,每个禽兽传染且仅传染 0 个禽兽,在 64 位无符号整数范围内。
但是,总共有多少组Hack数据呢?
这里,我写了个程序,统计对于每一个 n, x 的上界和下界是多少。但是由于浮点数有误差,不保证一定准确。
#include<bits/stdc++.h>
const unsigned long long Min=(1ull<<63)-1,Max=-1;
int main(){for(int x=1;x<=64;x++)printf("%d %.0f %.0f\n",x,pow(Min,1.0/x)-1,pow(Max,1.0/x)-1);}
自然,有推翻就要有重建,于是yummy写了个自认为已经足够强的代码供参考:
#include<bits/stdc++.h>
using namespace std;
unsigned long long x,n,ans=1;
int main()
{
scanf("%llu%llu",&x,&n);
if(n>64)
return puts("1")&0;
for(int i=1;i<=n;i++)
ans*=x+1;
printf("%llu",ans);
return 0;
}