关于scanf
查看原帖
关于scanf
732426
zhanghy123楼主2024/7/22 15:03
#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);

就 4040 分。

不是 1≤x,n≤1091\le x,n \le 10^9 吗,快速幂的时候有强转,为什么输入的时候一定要开 long long 呢?

赛时因为快读和 x∈{1,2}x \in\{1,2\} 时的特判喜提 2020 分

2024/7/22 15:03
加载中...