1.1 oj結果:
accepted :通過用例
time limit exceed :超時
runtime error: 程式非法訪問記憶體或未處理異常
memory limit exceeded: 記憶體超限
presentation error: 輸出的內容對的,但是格式不符合
output limit exceeded : 輸出過多內容
compile error 未能編譯
1.2 執行時間
對於乙個限制時間為1秒的題目,我們要估計演算法的複雜度。並將數值可能最大的值帶入其中
如:n²的複雜度,若n≤1000,則平方為 1000 000 .
在1秒的限制時間內完成:
1000000 游刃有餘
10000000 勉勉強強
100000000 幾乎不可能
2.1.1 棧#include可以直接呼叫c++自帶的棧庫
stacks 使用模板類來進行宣告。
s.push(3) 向棧中推進int 3.
s.pop()是推出。但是並不返回值
s.top()才是返回值。
2.1.2 佇列#includequeue可以宣告
需要注意的是,queue.front()才是返回隊首的值,而pop也是將其推出。
2.1.3 深度優先搜尋dfs
下面這道題是乙個判斷農田水窪數目的題。
由於最近的降雨,水匯集在farmer john's田地的不同地方,其由n×m(1 <= n <= 100; 1 <= m <= 100)的正方形矩形表示。每個方塊包含水('w')或旱地('。')。農夫約翰想弄清楚他的田地裡有多少個池塘。池塘是一組連線的正方形,其中有水,其中乙個正方形被認為與其所有八個鄰居相鄰。
10 12
w........ww.
.www.....www
....ww...ww.
.........ww.
.........w..
..w......w..
.w.w.....ww.
w.w.w.....w.
.w.w......w.
..w.......w.
最終結果是對每個點至多會有8次迴圈,對於搜尋到的點,都會對其周圍八個點進行搜尋,進行8次迴圈。因此,複雜度小於o(8nm)。
並且,搜尋過的水窪點會被置為』.』。在外部迴圈就不會被再次遍歷。
思路就是,對整個農田進行遍歷,遇到乙個水窪就進行深度搜尋,直到將其相鄰水窪都置為』.』。外部迴圈的每次返回相當於乙個池塘被填平。我們只要記錄池塘被填平的次數就可以了。
#includeint n,m;
int max_n=100;
int max_m=100;
char field[100][100];//田地的大小
void dfs(int x,int y)
}return;
}int main()
for(int i=0;i2.1.6 剪枝
上面所說的窮舉法,可能會因為解空間過大而時間複雜度過高。在判斷過程中,可能會有一些細節能讓我們知道該路徑可以提前結束。從而減少不必要的搜尋活動。
《挑戰程式設計競賽》 演算法初級篇
本系列為 挑戰程式設計競賽 讀書筆記,分為初級篇 中級篇 高階篇 初級篇目錄 窮竭搜尋 貪心 動態規劃 資料結構 圖論 數論 特殊狀態列舉 可行解空間多數可採用dfs,但當其比較特殊時,可簡短地實現 棧記憶體與堆記憶體 所以一般演算法競賽中都使用全域性陣列,開的最大 main函式中的區域性變數儲存在...
《挑戰程式設計競賽》閱讀筆記三
alds1 3 a stack 題目 我就不發了 這是 我抄書的,自己嘗試用stack寫,然後忘了stack怎麼用了 zzz include include include int top,s 105 void push int x int pop int toint char s return r...
挑戰程式設計競賽學習筆記1
const定義的變數值在程式執行過程中不允許發生改變 printf根據格式符輸出對應型別 putchar只能輸出字元 puts可以輸出字串 設計高效且正確的演算法 正確地實現 並且,為了設計演算法,靈活的想象力 演算法的基礎知識 也是必不可少的。程式設計競賽就是以程式設計為主題舉辦的競賽。n個紙片,...