#include<bits/stdc++.h>
using namespace std;
int T,mod=1e9+7;
long long x,n;
long long qpow(long long p,long long q)
{
if(q==0)
return 1;
else if(q&1)
return qpow(p,q-1)%mod*p%mod;
else
{
long long tmp=qpow(p,q/2);
return tmp%mod*tmp%mod;
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&x,&n);
if(x==1)
{
x=3;
n-=2;
}
if(x==2)
{
x=3;
n--;
}
if(n<0)
printf("%lld\n",(n+x)%mod);
else
printf("%lld\n",(qpow(2,n)%mod*x)%mod);
}
}
上面代码可 AC,但是将
scanf("%lld%lld",&x,&n);
改成
scanf("%d%d",&x,&n);
就 40 分。
不是 1≤x,n≤109 吗,快速幂的时候有强转,为什么输入的时候一定要开 long long 呢?
赛时因为快读和 x∈{1,2} 时的特判喜提 20 分