原创 LA 3704 Cellular Automaton(矩陣快速冪)

題目 https://vjudge.net/problem/UVALive-3704 構造出來矩陣後,發現這是一個循環矩陣,從第二行開始每一行都是上一行向右,所以只需要保留第一行數據,使時間複雜度邊爲(O^2log k) #includ

原创 UVA 10870 Recurrences (矩陣快速冪)

由於n太大,不能直接遞推,需要用矩陣快速冪來解決,時間複雜度爲O(d^3logn)     舉例,d=5的矩陣關係式爲:                 |a1 a2 a3 a4 a5|                 | f[n-1]

原创 藍橋杯 油漆面積(線段樹區間修改+離散+掃描線)

10.標題:油漆面積 X星球的一批考古機器人正在一片廢墟上考古。 該區域的地面堅硬如石、平整如鏡。 管理人員爲方便,建立了標準的直角座標系。 每個機器人都各有特長、身懷絕技。它們感興趣的內容也不相同。 經過各種測量,每個機器人都會報告一個

原创 UVA 10214 Trees in a Wood(歐拉函數)

枚舉每列,只要找到g(x,y)=1中的所有y即可。 因爲1~x中,與x互質的假如有i個,那麼[1+x,2x]中也有i個,因爲相當於那互質的i個每個加了x,公因數還是1 1≤y≤x         有phi(x)個 x+1≤y≤x     

原创 2017 藍橋杯 迷宮(dfs)

X星球的一處迷宮遊樂場建在某個小山坡上。 它是由10x10相互連通的小房間組成的。 房間的地板上寫着一個很大的字母。 我們假設玩家是面朝上坡的方向站立,則: L表示走到左邊的房間, R表示走到右邊的房間, U表示走到上坡方向的房間, D表

原创 UVA 11440 Help Mr.Tomisu(歐拉公式)

題目:https://vjudge.net/problem/UVA-11440 所有素因子都大於M等價於和M!互素,因爲和M!互素的數中不包含M中的任何因子。 在kn中與n互質的個數如何求: 在1~n中與n互質的個數爲phi[n],再[n

原创 藍橋杯 2019 糖果(01揹包問題的狀態壓縮)

採用了滾動數組的方法。 狀態轉移:把第i,i+1,i+2的糖果裝到 j的揹包後,現有揹包的糖果爲j|a[i]。 #include<bits/stdc++.h> using namespace std; int n,m,k,temp;

原创 UVA 10891 Sum遊戲 (DP)

題目:https://vjudge.net/problem/UVA-10891 第一種方法:記憶化搜索 狀態有O(n^2),每個狀態有O(n)個轉移,所以時間複雜度爲O(n^3) #include<bits/stdc++.h> #inc

原创 UVA 10635 王子和公主(LCS轉LIS)

題目:https://vjudge.net/problem/UVA-10635 傳統LCS問題時間複雜度爲O(p*q),但是此題p*q高達250*250=62500,有些太慢 所以把問題轉化爲LIS,時間複雜度變爲(n*logn) 先把A

原创 LA 3882 約瑟夫環變形(遞推)

假設有n個人,每次從0數,刪除第k個人。 此時編號 k    0 k+1     1 k+2      2 ..... 倒着推會發現每一輪的勝利者編號都少了個K,然後利用遞推復原回去。 f[n]=(f[n-1]+k)%n 直到最後一輪,最

原创 UVA 11922 排列變換(Splay)

給節點增加一個flip標記,用來表示以本節點爲根的子樹有沒有旋轉過。 合併過程中的細節:先把left中的最大元素伸展到根節點,此時的最大元素一定無右子樹。 分裂時,就直接把第k小元素伸展到根,然後斷開根與右子樹的鏈接關係。 #incl

原创 藍橋杯 2019 RSA加密 (快速冪 快速乘 歐拉定理 乘法逆)

RSA 是一種經典的加密算法。它的基本加密過程如下。 首先生成兩個質數 p,q 令 n=p⋅q 設 d 與(p-1) * (q-1) 互質,則可 找到 e 使得 d⋅e  除 (p−1)⋅(q−1)  的餘數爲 1. n,d,e  組成了

原创 計數基礎

有重複元素的全排列:  有k個元素,其中第i個元素有ni個,求全排列個數。 分析:令所有ni之和爲n,再設答案爲x。首先做全排列,然後把所有元素編號,其中第s種元素編號爲1~ns。 這樣做以後,由於編號後所有元素均不相同,方案總數爲n的全

原创 UVA 11582 巨大的斐波那契數!

因爲數太大一定會溢出,所以找規律,發現最多n²會出現重複。 先計算出一個週期裏的,所有滿足f(a的b次冪)處以n的餘數,接下來就是匹配, 讓a的次冪匹配到這個週期裏對應的下標,把含有該下標的除以n的餘數輸出。 注意unsigned lon

原创 UVA 11462 年齡排序(桶排序)

考慮到該題對內存要求限制比較嚴格,不能把所有數據保存,所以考慮用桶排。 #include<cstring> #include<cstdio> int c[101],n; int main(){ while(scanf("%d",