SUM OF SUB RECTANGLE AREAS (矩阵快速幂+高精度+压位)

题目链接
打表可以发现ans[n]是完全平方数,令f[n]=sqrt(ans[n])
可以求得 f]n]=3 * f[n-1] - 3 * f[n-2] + f[n-3] + 1;
所以可以用矩阵快速幂求得,答案爆ll,还得套高精度模板,如果高精度每一位都存个位数还是会超时,所以还得压位。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
typedef long long ll;
const int mod=1e8;//压8位,mod=1e8

int T;
ll n,m;
void del(vector<int> &C)//清前导0 
{
   
	while (C.size() > 1 && C.back() == 0) C.pop_back();
}
vector<int> addd(vector<int> A, vector<int> B)//高精度加法 
{
   
    if (A.size() < B.size()) return addd(B, A);
    vector<int> C;
	int t=0;
    for (int i = 0; i < A.size(); i ++ )
    {
   
        t += A[i];
        if (i < B.size()) t += B[i];
        C.push_back(t % mod);
        t /= mod;
    }
    if (t) C.push_back(t);
    return C;
}
vector<int> mul(vector<int> A, int b)// C = A * b, 高精度乘低精度 
{
   
    vector<int> C;
    ll t = 0;
    for (int i = 0; i < A.size() || t; i ++ )
    {
   
        if (i < A.size()) t += 1ll*A[i] * b;
        C.push_back(t % mod);
        t/=mod;
    }
    return C;
}
bool check(vector<int> &a,vector<int> &b)//比大小 
{
   
	del(a);del(b);
	if(a.size()>b.size()) 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值