直接照题目模拟,数据范围最大不会超过__int128
。
时间复杂度为 (O(log n)) 。
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
__int128 ans;
int t, a, b;
long long n;
__int128 solve(__int128 n)
{
__int128 ans = n*n*n*b+(n-1)*n*n*a;
if(n%2==0)ans = min(ans,18*(n/2)*(n/2)*a+7*solve(n/2));
return ans;
}
int main()
{
for(scanf("%d", &t); t--;){
cin >> n >> a >> b;
cout << (int)(solve(n) % mod) << endl;
}
return 0;
}