题解
2026-07-09 22:10:02
发布于:广东
1阅读
0回复
0点赞
思路
知道尽量拆分为3的乘积即可。
举个例子:,得第一种拆法所得结果>第二种拆法。
试着枚举的情况:
- 0:直接为 。
- 1:用10举例。,得第一种拆法所得结果>第二种拆法。那么遇到这种情况就选择少拆一个3,多一个4,使结果更大,即 。
- 2:同样举例子,少拆凑5的结果小于正常拆,为 。
注意点:
- 使用快速幂否则超时。
- 特判n==1,不然会计算 ,你好TLE。
代码
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const ll Mod=1e9;
ll t,n,res;
ll Fast_Pow(ll x,ll y){
ll res=1,v=x;
while(y){
if(y&1) res=res*v%Mod;
v=v*v%Mod;
y>>=1;
}
return res;
}
int main(){
ios::sync_with_stdio(0);cin.tie(nullptr);
cin>>t;
while(t--){
cin>>n;
res=1;
if(n%3==2) res=Fast_Pow(3,n/3)*2%Mod;
else if(n%3==0) res=Fast_Pow(3,n/3);
else if(n==1) res=1;
else res=Fast_Pow(3,n/3-1)*4%Mod;
cout<<res<<'\n';
}
return 0;
}
这里空空如也





有帮助,赞一个