DBSDFZOJ 4847 環線(矩陣快速冪)

2021-08-16 08:27:58 字數 687 閱讀 7498

倍增floyd的時候在維護當前數字權值p的時候同時維護乙個字首和pa,即如果p表示路徑長度為i的路徑的方案數,那麼pa表示路徑長度為1~i的路徑的方案數的和。每次翻倍的時候pa=pa*p+pa;p=p*p。可以用pa和p更新快速冪的答案。時間複雜度o(n^3 log k)。

#include

#define n 105

using

namespace

std;

char s[n][n];

int n,k,mod;

long

long ans;

struct matrix

}base;

matrix operator* (matrix a,matrix b)

matrix operator+ (matrix a,matrix b)

matrix ksm(int n)

return re;

}int main()

}scanf("%d%d",&k,&mod);

if(k<3)

matrix an=ksm(k-1);

for(int i=1;i<=n;++i) ans=(ans+an.a[i][i])%mod;

printf("%lld\n",ans);

return

0;}

DBSDFZOJ 4846 攻略(貪心)

我們可以得到乙個簡單的貪心策略。假設攻略是有順序的,每次攻略必然選擇當前價值和最大的路線。我們可以維護每個節點到乙個葉子節點的點權和的最大值,用大根堆維護,每次刪去堆頂元素所代表的那條路線,並把這個路線旁的其它節點加入堆中。include define n 200005 define pa pair...

DBSDFZOJ 4844 區間(分治)

可以發現對於詢問的區間,只有區間裡的最小值和最大值是有意義的。不妨把詢問原區間等效為詢問值域區間。大題思路是在輸入時我們很容易知道想讓乙個連續區間包含這段詢問區間至少需要向左向右擴充套件到 但是因為擴充套件時可能會改變區間的最大 小 值,所以我們找出到底擴充套件到 可以符合條件即可。令輸入的序列為a...

今日小結 4 8

1.昨天我讓recyclerview顯示sd卡上的 非常卡,卡到程式閃退,可能是sd卡上的 資料量大,直接載入比較慢,同時載入多張可能就會oom out of memory 比較好的解決方案是先把快取到記憶體上,然後動態載入,只載入要顯示的 因為記憶體資源訪問速度快,且動態載入 消耗記憶體小。訪問網...