1001
給你1~n這n個數字,公升序排列,接下來按照陣列a進行位置變換,a[i]代表第i個數字會變到a[i]位置上,a中的數字也是從1~n。現在問有多少個不同的陣列能滿足做一次變換和做三次變換結果相同。
我們可以這樣分析,x->y是唯一的到y的途徑,假設x->y為第一次變換,因此在第三次變換的時候任然為x->y,第二次變換的初始點為y,而第三次變換的初始點為x,因此第二次變換為y->x,因此,對於陣列a,只要有任意兩個數字互相交換位置即是一種合法的情況。接下來就是計算n個數字有多少種情況。
我們可以發現這個問題具有子結構,因此考慮到dp來解,假設dp[i]為長度為i的陣列的合法情況,那麼當長度為i+1時dp[i+1] = dp[i] + i * dp[i - 1],其含義就是,我可以把多出來的這個元素單獨放在一邊,那麼就有1*dp[i]種,或者與前面的任意乙個元素互換,那麼就有i*dp[i-1]。然後只需要進行一下預處理就可以了,dp[0] = 0,dp[1] = 1。複雜度為o(n)。
ac**
#include #include #include #include #include using namespace std;
#define mod 1000000007
#define m 1000100
#define ll long long
ll dp[m];
void init()
}int main()
int main()
}cout<1004
這個題目似乎只要在中心能夠放下第乙個盤子就能獲勝。
這個題沒寫也沒法交...看看以後能不能交
1005
這個題目只要發現了棋子行走的特點就能搞出來。對於王來說,每過乙個單位時間,能走到的位置就向外擴一圈,而圈內部的任意位置都可以在t時間走到。對於馬來說,只要能在t的時間走到的位置,均可以在t + 2*k的時間走到。因此我們進行兩次bfs,對每乙個格仔分別標記馬和王最早能到達的時間,然後把所有的格仔都掃一遍,找最小值。
1006
乙個dp題,三個狀態dp[i][j][k],i代表當前的長度,j代表以什麼數結尾,k代表現在是上公升還是下降,dp陣列儲存的是平均單調區間數和區間總長度除以總個數。因此兩個一除便是平均單調區間長度。第二問即求出了。
2016 百度之星 資格賽
變懶了,最近做的很多題目都不想貼了。本來就sb,還那麼懶,沒救了。a沒想太多,設個逆元就過了。b斐波那契數列高精度。n 0時輸出換行。c字典樹,記錄結點的單詞數 以及 當前結點是否是單詞的末尾,delete時需要先找出字首對應的串數,那麼就dfs統計末尾結點總數,然後用字首減掉就好了。一開始dfs跑...
2015百度之星資格賽1001
題目名稱 大搬家 problem description 近期b廠組織了一次大搬家,所有人都要按照指示換到指定的座位上。指示的內容是坐在位置 i 上的人要搬到位置 j 上。現在b廠有 n 個人,一對一到 n 個位置上。搬家之後也是一一對應的,改變的只有位次。在第一次搬家後,度度熊由於疏忽,又要求大家...
2015百度之星資格賽1002
problem description 列變位法是古典密碼演算法中變位加密的一種方法,具體過程如下 將明文本元分割成個數固定的分組 如5個一組,5即為金鑰 按一組一行的次序整齊排列,最後不足一組不放置任何字元,完成後按列讀取即成密文。比如 原文 123456789 金鑰 4 變換後的矩陣 1234 ...