大致題意:
有n只貓,開始時每只貓有花生0顆,現有一組操作,由下面三個中的k個操作組成:
1. g i 給i只貓一顆花生米
2. e i 讓第i只貓吃掉它擁有的所有花生米
3. s i j 將貓i與貓j的擁有的花生米交換
現將上述一組操作循環m次後,問每只貓有多少顆花生?
再一次感受到了矩陣的強大。。。循環m次,且m這麼大,很容易想到構造轉換矩陣,但如何構造是個問題。尤其是第一種操作,第i只貓增加一個花生。具體構造方法是把矩陣擴大為(n+1)*(n+1)的,初始化為單位矩陣,g i: a.mat[0][i] += 1; e i :第i列全置為0; s i j: 第i、j列元素互換
這樣形成轉換矩陣後,循環m次,用矩陣快速冪求得,最後取矩陣第0行的1~n就是答案。
點擊打開鏈接 學習了。。
#include
#include
#include
#include
#include