51nod 1668 非010串(矩阵快速幂)
2017-09-15 19:25
141 查看
怎么说呢,找了半天规律,找完规律后,发现中间算错了一个数
把数改过来后,原来找的规律就没了。。。。求助于讨论版
把数改过来后,原来找的规律就没了。。。。求助于讨论版
#include <iostream> #include <vector> using namespace std; typedef long long ll; typedef vector<ll> vec; typedef vector<vec> mat; const ll mod = 1e9+7; mat mul(mat& A, mat &B) { mat C(A.size(),vec(B[0].size())); for(int i = 0; i < A.size(); ++i) for(int k = 0; k < B.size(); ++k) for(int j = 0; j < B[0].size(); ++j) C[i][j] = (C[i][j]+A[i][k]*B[k][j]+mod)%mod; return C; } mat pow(mat A, ll n) { mat B(A.size(),vec(A.size())); for(int i = 0; i < A.size(); ++i) B[i][i] = 1; while(n > 0) { if(n&1) B = mul(B,A); A = mul(A,A); n >>= 1; } return B; } void solve(ll n) { mat A(3,vec(3)); A[0][0] = 2; A[0][1] = -1; A[0][2] = 1; A[1][0] = 1; A[1][1] = 0; A[1][1] = 0; A[2][0] = 0; A[2][1] = 1; A[2][2] = 0; A = pow(A,n); cout << (A[0][0]+A[2][0]+mod)%mod << endl; } int main() { ll n; cin >> n; solve(n); return 0; }
相关文章推荐
- 51nod 1033 骨牌覆盖 V2(矩阵快速幂)
- 51Nod 1113 矩阵快速幂
- 51nod 求递推序列的第N项(矩阵快速幂、模拟求循环长度)
- 51nod 1341(推公式、矩阵快速幂)
- 51nod 1242 斐波那契数列的第N项(矩阵快速幂)
- 51nod 1033 骨牌覆盖 V2(矩阵快速幂)
- 矩阵快速幂 51nod
- 51nod 1242 斐波那契数列的第N项(矩阵快速幂)
- 51Nod-斐波那契数列的第N项(矩阵快速幂)
- 51NOD 1537 分解(矩阵快速幂)——算法马拉松17(告别奥运)
- 51nod 1242 斐波那契数列的第N项 (矩阵快速幂)
- 51nod 1126 求递推序列的第N项(矩阵快速幂、循环)
- 51nod 1033 骨牌覆盖 V2(矩阵快速幂)
- 51Nod 1358 浮波那契 (矩阵快速幂)
- 51nod1668非010串+矩阵快速幂
- 51nod 1126 求递推序列的第N项 (矩阵快速幂)
- 【51Nod 1142】棋子遍历棋盘 矩阵快速幂+插头DP
- 51nod 1033 骨牌覆盖 V2(矩阵快速幂)
- 【51Nod】1126 - 求递推数列的第N项(矩阵快速幂 & C++运算符重载)
- 51nod 1197 字符串的数量 V2(矩阵快速幂+数论?)