HDU 6719 Strassen(dfs,大数)

题目链接

解题思路

  用__int128解决炸\(long long\)的问题之后爆搜就是了,因为\(n\)最多递归到\(n=1\)的情况,所以时间复杂度只有O(Tlogn).

代码

unsigned __int128 a, b;
unsigned __int128 solve(unsigned __int128 n) {
    if (n&1) return n*n*n*b + (n-1)*n*n*a;
    else return min(n*n*n*b + (n-1)*n*n*a, (n/2)*(n/2)*a*18+solve(n/2)*7);
}
int main(void) {
    int t;
    cin >> t;
    while(t--) {
        times = 0;
        ll n, x, y;
        cin >> n >> x >> y;
        a = x, b = y;
        ll ans = solve(n)%MOD;
        cout << ans << endl;
    }
    return 0;
}
posted @ 2020-05-01 18:32  shuitiangong  阅读(168)  评论(0编辑  收藏  举报