題意:將一個由A*A個方格組成的方塊,分成k個B*B的方塊和1個小方格後連乘一個由k+1個物體組成的環形物,,A=3時有兩種分法。用C種顏色為每個方格染色,旋轉得到的兩種方案記為相同方案,問一共有多少種不同方案。解法:如果將B*B的小正多邊形看做一個整體,則B*B的方案數即外圍“長度為k的項鏈”的顏色數,因此此題要嵌套兩個polya分別對B*B和K+1個物體的方案數分別計算。1.由於A巨大,因此不能提供枚舉A*A-1的質因子確定B,首先將A*A-1化為(A+1)(A-1)然後分別求得A+1和A-
poj 2987 Firing題意:一個公司要裁人,給出裁每個人都有個盈利或者損失,如果一個人的上司被裁那麼他也將被裁,現給出上下級關係問怎樣裁才能使得公司的收益最大,最大為多少?思路:最大(點)權閉合圖,挺經典的一道題,在《最小割模型在資訊學競賽中的應用》有詳細的證明。spoj 1476 MaximumProfit題意:n個中轉站,每個站建立花費Xi m個客戶,每個客戶需要中轉站Ai,Bi,獲得收益為Ci,
穩定婚姻問題:有n位男士和n位女士,每一個人都對每個異性有一個喜好度的排序,代表對他的喜愛程度,現在希望給每個男士找一個女士作配偶,使得每人恰好有一個異性配偶。如果男士u和女士v不是配偶但喜歡對方的程度都大於喜歡各自當前配偶的程度,則稱他們為一個不穩定對。穩定婚姻問題就是希望找出一個不包含不穩定對的方案。
Burnside引理:記C(f)為在置換f下保持不變的著色方案的個數,那麼本質不同的著色方案數位所有置換f的C(f)值的平均數。如果求給定置換C(f)的方法為“一次判斷每個著色方案是否在該置換下不變”由於每個方案包含p個“格子”的顏色資訊,考察每個方案的複雜度為O(p),考察所有n種著色方案的複雜度為O(np),由於有s種置換方案,因此時間複雜度為O(nsp).Polya定理:如果用k種顏色給有限集s著色,設m(f)為置換f的迴圈節的個數,則C(f)=k^m(f)(因為每個迴圈節之間的元素顏色應
【問題描述】已知兩個序列,分別表示二叉樹前序走訪和中序遍曆的結果,根據他們建立一個二叉樹,注意處理兩個序列不合法的情況。【舉例】如果輸入為:char preOrder[]={'a','b','d','e','c','f','g'};char inOrder[]={'d','b','e','a','f','c','g'};輸出這樣一棵樹:【代碼】#include "stdafx.h"#include <iostream>using namespace std;struct
什麼是殭屍進程 殭屍進程是指它的父進程已經退出(父進程沒有等待(調用wait/waitpid)它),而該進程dead之後沒有進程接受,就成為殭屍進程,也就是(zombie)進程。 殭屍進程是怎麼樣產生 一個進程在調用exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下一個稱為殭屍進程(Zombie)的資料結構(系統調用exit,它的作用是使進程退出,但也僅僅限於將一個正常的進程變成一個殭屍進程,並不能將其完全銷毀)。 在Linux進程的狀態中,殭屍進程是非常特殊的一種,它
1.關於DLX的重複覆蓋:根據與精確覆蓋概念的區別可知,只需改變remove()和resume()函數控制刪除和恢複的過程即可實現,對於求解最少步數問題,可藉助ida*中的h()函數最佳化。2.重複覆蓋+精確覆蓋:某些元素可重複覆蓋(目標),而某些元素只能精確覆蓋(每類元素只能使用一次),這是要對前m列進行重複覆蓋的刪除回複操作,對後面的列進行精確覆蓋的操作,也有一些特殊情況可直接使用重複覆蓋代替。如hdu2828,每類元素只有兩種,可通過visit數組在選中某個元素時刪除同類中的另一個元素,實
【問題描述】對【二叉樹1】中建立的二叉樹逐層列印,也就是說第一行列印第0層根節點,第二行列印第一層……如此類推。【舉例】一棵二叉樹如下:列印結果為:【代碼】編程之美介紹了兩種實現,一種是遞迴,另一種就是如下方法,用兩個遊標記錄樹的每一層。代碼僅為為該函數的實現,和所需標頭檔。並且不包含二叉樹節點的定義以及main函數的調用#include <iostream>#include <vector>using namespace std;void
Linux中的實際使用者ID,有效使用者ID和儲存的設定使用者ID一般是對於進程而言的,具體概念如下:實際使用者ID(real user-id):標明進程的執行者是誰。有效使用者ID(effective user-id):標明進程執行時對檔案的存取權限儲存的設定使用者ID(saved
1.置換群中有一個定理:設T為一置換,e為單位置換,T^k=e,那麼k的最小正整數解是T的拆分的所有迴圈長度的最小公倍數。此定理用來解決Poj 2369Permutation2.T^k將長度為L的置換T分裂成gcd(L,K)份,每個迴圈分別是迴圈T中下標i mod
【問題描述】在一個int型二叉樹中,找到和為某一值的所有路徑,路徑的定義為根節點到葉子節點【舉例】【代碼】用一個數組path來記錄路徑,每經過一個節點就從sum中減去該結點的值,並在path中記錄,直到到達葉子節點,查看sum是否被減到了0,如果為0則滿足條件int printSP(treeNode *root,int sum,int path[],int top){if(root==NULL)return
【APUE習題 3.5】./a.out > outfile 2>&1和./a.out 2>&1 > outfile的區別 int main() { printf("output to stdio\n"); fprintf(stderr,"output to stderr\n"); return 1; } 結果如下: qun@ThinkPad ~/tmp $ ./a.out >
此題是以《NOI2008志願者招募》為背景的,預做此題需要先體會《志願者招募》的思想只不過由線性結構變為樹形結構,但是問題的本質沒有變,都是一個元素影響連續的若干個位置,構圖的本質都是使每個變數x出現分別以+和-的形式出現在兩個恒等式中,由此可以看做x變數從+式流入-式流出。設藥品為x,為每條河建立一個等式,則x出現在了u的父邊到v的父邊路徑上的所有等式中,因此用每個點的父邊減去所有孩子的邊(設根節點的父邊為全0,即沒有限制)得到n個等式,且所有變數x、y均以+和-的形式各出現一次,由此可以構圖
經常在各種論壇上看到大牛們認真寫自己的面經,沒經曆過那馬多面試,只能向他們學習了,演算法都記錄下面,只是想了想,這幾天實驗室太忙,有時間一定要親自實現出來!【hulu面試】http://bbs.byr.cn/#!article/ParttimeJob/3147861、給出一個整數序列,判斷他是否是二叉排序數的後續遍曆。(不要利用額外空間,考慮O(nlgn)和O(n)的時間複雜度)2、給出因子為至少3,5,7其中之一的第k大的數。3、給定一個n*n的二維數組,行是遞增的,列是遞增的,且整數都不重複
策略模式:定義演算法族,分別封裝起來,讓他們之間可以相互替換,此模式讓演算法的變化獨立於使用演算法的客戶。簡單工廠:將對象的建立完全獨立出來,讓對象的建立和具體的使用客戶無關。簡單工廠嚴格意義上不是一種設計模式,只能是一種良好的編程習慣。名詞理解:工廠(Factory)模式我們可以做如下理解,假設有一個Audi的公司生產汽車(似乎也不用假設了),它掌握一項核心的技術就是生產汽車,另一方面,它生產的汽車是有不同型號的,並且在不同的生產線上進行組裝。當客戶通過銷售部門進行預定後,Audi公司將在指定
題意:有N+1個點,每個點與編號大於自己的點之間有一條有權邊(權重通過floyd求得),現有k個人位於0處,要從k個人中選出若干個人遍曆其它點並最終回到0點,使每個點(除0外)都被訪問恰好一次,問最小費用之和為多少解法:每個點之多走一次,顯然需要把一個點拆成兩個,一個出點一個入點之間費用為0流量為1,超級源點拆為流量為k費用為距離的邊,但如何讓保證每個點都恰好走過一次呢?由於原圖無環,所以可以將i和i‘之間的費用設為-M,流量設為1,M應該大於源點和匯點間最長鏈的長度。由於每次都找最短路徑,因此
好像目前還沒有這方面題目的總結。這幾天連續看到四個問這類題目的人,今天在這裡簡單寫一下。這裡我們不介紹其它有關矩陣的知識,只介紹矩陣乘法和相關性質。 不要以為數學中的矩陣也是黑色螢幕上不斷變化的綠色字元。在數學中,一個矩陣說穿了就是一個二維數組。一個n行m列的矩陣可以乘以一個m行p列的矩陣,得到的結果是一個n行p列的矩陣,其中的第i行第j列位置上的數等於前一個矩陣第i行上的m個數與後一個矩陣第j列上的m個數對應相乘後所有m個乘積的和。比如,下面的算式表示一個2行2列的矩陣乘以2行3列的矩陣
問題描述對一個正整數n,如果n在資料檔案中某行的兩個正整數(假設為A和B)之間,即A<=n<=B或A>=n>=B,則n屬於該行;如果n同時屬於行i和j,則i和j有重疊區間;重疊區間的大小是同時屬於行i和j的整數個數。例如,行(10 20)和(12 25)的重疊區間為[12 20],其大小為9;行(20 10)和(12 8)的重疊區間為[10 12],其大小為3;行(20 10)和(20
OSI七層模型應用程式層:提供網路應用協議展示層:為使用者提供資料轉換和表示服務會話層:為使用者提供會話控制服務(安全認證)傳輸層:為使用者提供端到端的Data Transmission Service網路層:控制通訊子網原點到目的點的資料轉送(Packet)資料連結層:在有差錯的物理線路上提供無差錯的資料轉送(Frame)物理層:在物理線路上傳輸原始的位元據位 TCP/IP 五層模型應用程式層:同OSI傳輸層:提供端到端的Data Transmission ServiceTCP和UDP網路層:
題意:給出n個點,先要將n個點分為k個集合,要求對於每一個元素,都能在同一集合內找到至少一個元素滿足兩者之間的曼哈頓距離小於X,問最小的x是多少解法:顯然是求最小產生樹上第k長的邊,由於是完全圖,因此要充分利用曼哈頓距離的特點求解。定理:可以證明每一個頂點在最小產生樹中在這45度的範圍內至多僅有一條邊與之相連。