HDU6719 Strassen(__int128)
直接照题目模拟,数据范围最大不会超过__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;
}
 
                    
                     
                    
                 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号 
