标签:lob amp pen ++ ges std include arc 注意
(calc.c/cpp)
sxd又要AK了。于是,小G想要nai他一下:
于是,sxd发火了。
sxd:既然你数学比我差你就没资格nai我!!!
sxd想跟你比一比计算能力
sxd认为自己配不上出这种傻逼计算题,就叫LGX出了一道。
做为小G好基友的你,只要你的程序能在1s内完成此题,小G就可以顺利地继续用正当理由nai SXD了。当然,小G也将以100分为奖励赠送给你。
本次计算一共分三个步骤
三个正整数\(a,b,c\)。
一个正整数\(ans\)。
#include <cstdio>
#define deb 0
typedef long long LL;
inline LL pow_mod(LL a,LL b,LL mod)
{
a%=mod;
LL ans=1;
for(; b; b>>=1,a=a*a%mod)if(b&1)ans=ans*a%mod;
return ans;
}
const LL mod=1e9+7;
inline LL solve1(LL a,LL b)
{
return pow_mod(a,pow_mod(a,b-1,mod-1),mod);
}
inline LL solve2(LL n)
{
if(n<=1)return 0;
if(n&1) return (solve2(n>>1)+solve2((n>>1)+1)+(n>>1))%mod;
else return ((solve2(n>>1)<<1)%mod+(n>>1)%mod);
}
const LL mo=1e5+7;
LL farc[mo+3];
inline void prepare()
{
farc[0]=1;
for(LL i=1; i<=mo; ++i)farc[i]=(farc[i-1]*i)%mo;
}
inline LL Csmall(LL m,LL n)
{
if(n<m) return 0;
return farc[n]*pow_mod(farc[m],mo-2,mo)%mo*pow_mod(farc[n-m],mo-2,mo)%mo;
}
inline LL C(LL m,LL n)
{
LL ans=1;
while(n&&m&&ans)
{
ans=(ans*Csmall(m%mo,n%mo))%mo;
n/=mo,m/=mo;
}
return ans;
}
inline LL calc(LL a,LL b,LL c)
{
LL ans1=solve1(a,b);
LL ans2=solve2(c);
prepare();
#if deb
printf("%lld %lld\n",ans1,ans2);
#endif
if(ans1>ans2)return C(ans2,ans1);
else return C(ans1,ans2);
}
int main()
{
#if !deb
freopen("calc.in","r",stdin);
freopen("calc.out","w",stdout);
#endif
#if 0
SXDAKZJOI^_^
#endif
LL a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
printf("%lld",calc(a,b,c));
#if !deb
fclose(stdin);
fclose(stdout);
#endif
return 0;
}
标签:lob amp pen ++ ges std include arc 注意
原文地址:https://www.cnblogs.com/pfypfy/p/8906024.html