题意思路很简单,递归求最小就好了。但__128int没见过。故写博客记下。__128int如果输入输出就要自己写函数。
#include<bits/stdc++.h> using namespace std; const int mo=1e9+7; typedef __int128 lll; int T,a,b;long long n; lll calc(lll n) { lll ans=n*n*n*b+(n-1)*n*n*a; if(n%2==0) ans=min(ans,18*(n/2)*(n/2)*a+7*calc(n/2)); return ans; } int main(){ scanf("%d",&T); while(T--) { cin>>n>>a>>b; printf("%d ",int(calc(n)%mo)); } return 0; }