題意:
n個人排隊,f表示女,m表示男,包含子串『fmf』和『fff』的序列為o佇列,否則為e佇列,有多少個序列為e佇列。
分析:
矩陣快速冪入門題。
下面引用巨巨解釋:
用f(n)表示n個人滿足條件的結果,那麼如果最後乙個人是m的話,那麼前n-1個滿足條件即可,就是f(n-1);矩陣快速冪和普通的快速冪原理是一樣的,如果不懂可以先去補補快速冪。如果最後乙個是f那麼這個還無法推出結果,那麼往前再考慮一位:那麼後三位可能是:mmf, fmf, mff, fff,其中fff和fmf不滿足題意所以我們不考慮,但是如果是
mmf的話那麼前n-3可以找滿足條件的即:f(n-3);如果是mff的話,再往前考慮一位的話只有mmff滿足條件即:f(n-4)
所以f(n)=f(n-1)+f(n-3)+f(n-4),遞推會跪,可用矩陣快速冪
構造乙個矩陣:
int power(int x,int y)
return ans;
}
#includeusing namespace std;
const int inf=0x3f3f3f3f;
typedef long long ll;
int l,mod;
struct node
void init(ll a)
};node mult(node a,node b)
return c;
}node power(node n,ll p)
return ans;
}int main()
return 0;
}
#include#include#includeusing namespace std;
const int mod=10000;
struct node
}a,b;
long long n;
node operator *(node a,node b)
void power(long long y)
}int main()
return 0;
}
傳送門:
#include#include#includeusing namespace std;
struct node
void init()
};int n,s,f,m,mod;
node operator *(node x,node y)
node power(node x,int y)
return res;
}int main()
void init()
}; ll p,n,m,h=2;
node operator *(node x,node y)
return res.f[0][0];
} int main()
return 0;
}
快速冪(整數快速冪 矩陣快速冪)
1 整數快速冪 例如求x 8 就是x x x x x x x x 正常的運算方式是,x的值乙個個往上乘上去,乘法運算執行7次 x x x x x x x x 也可以採用這種運算方式,先進行乘法得到x 2再對x 2進行三次乘法。這種運算要明顯比第一種情況要快 所以對於整數快速冪,也是結合了這種思想 x...
快速冪(矩陣快速冪)
求 3 0 3 1 3 n mod 1000000007 input 輸入乙個數n 0 n 10 9 output 輸出 計算結果 sample input 3sample output 40 分析 利用等比數列的求和公式得所求和是 3 n 1 1 2,如果暴力求3 n 1 會超時,這裡引入快速冪來...
快速冪 矩陣快速冪
快速冪 正常情況下求乙個數的冪時間複雜度為o n 而快速冪能把時間複雜度降到o logn 舉個例子 求5的13次方 思想首先把13化為二進位制 1101,即13 1101 8 1 4 1 2 0 1 1 即5 13 58 1 54 1 52 0 5 1 15 5 8 1 5 4 1 5 2 0 5 ...