程式設計競賽(acm)常用資料結構

2021-05-25 03:28:27 字數 2974 閱讀 7980

包含標頭檔案

:stack 定義

:stackname; //int

型的用法:

出棧: name.pop();//

出棧入棧

: name.push(t);

//t為入棧元素

棧頂: name.top()//

返回棧首

判空: name.empty();

//若為空返回

true 長度

: name.size();//

棧的大小

包含標頭檔案

:queue 定義

:queuename;

//int

型的用法:

出隊: name.pop();

入隊: name.push(t); //t

為入棧元素

隊首: name.front() 判空

: name.empty()

//若為空返回

true 隊尾

: name.back() 長度

: name.size();

包含標頭檔案

:queue

struct node

int priority;//

優先順序

int value;//值

}; 定義:priority_queue,cmp> name;

用法:隊首元素:

name.top()

其餘操作和佇列一樣

包含標頭檔案

:algorithm

stl裡面的堆操作一般用到的只有4個:

make_heap();

、pop_heap();

、push_heap();

、sort_heap();

1

make_heap();

函式原型:

void make_heap(first_pointer,end_pointer,compare_function);

乙個引數是陣列或向量的頭指標,第二個向量是尾指標。第三個引數是比較函式的名字。在預設的時候,預設是大跟堆。(下面的引數都一樣就不解釋了)

作用:把這一段的陣列或向量做成乙個堆的結構。範圍是

(first,last)

2

pop_heap();

函式原型:

void pop_heap(first_pointer,end_pointer,compare_function);

作用:pop_heap()

不是真的把最大(最小)的元素從堆中彈出來。而是重新排序堆。它把

first

和last

交換,然後將

[first,last-1)

的資料再做成乙個堆。

3

push_heap();

函式原型:

void pushheap(first_pointer,end_pointer,compare_function);

作用:push_heap()

假設由[first,last-1)

是乙個有效的堆,然後,再把堆中的新元素加進來,做成乙個堆。

4

sort_heap()

函式原型:

void sort_heap(first_pointer,end_pointer,compare_function);

作用是sort_heap

對[first,last)

中的序列進行排序。它假設這個序列是有效堆。(當然,經過排序之後就不是乙個有效堆了)

下面是例子:

包含標頭檔案

:algorithm

用法:sort(a,a+n);//

由小到大

sort(a,a+n,cmp);//cmp

排序的比較函式

qsort( a , size , sizeof(a[0])*size , cmp);

cmp寫法

1

int/char

2

double

3

char *

4

、結構體一級排序

5

、結構體二級排序

包含標頭檔案

:algorithm

用法:stable_sort (a,a+n);//

由小到大

stable_sort (a,a+n,cmp);

//cmp

排序的比較函式

包含標頭檔案

:algorithm

用法:nth_element(c,c+z,c+j); 解釋

:從c開始到

c+j的陣列中第

k小元素,陣列c第

k個即第

k小數,

c[k-1]

即為第k

小數,且之前的都比這個數小。

kmp演算法

Trie樹 ACM程式設計競賽

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了一本詞典,於是小hi就向小ho提出了那個經典的問題 小ho,你能不能對於每乙個...

ACM挑戰程式設計競賽1 1抽籤

試題描述 你的朋友提議玩乙個遊戲 將寫有數字的n 個紙片放入口袋中,你可以從口袋中抽取4 次紙片,每次記下紙片上的數字後都將其放回口袋中。如果這4 個數字的和是m,就是你贏,否則就是你的朋友贏。你挑戰了好幾回,結果一次也沒贏過,於是怒而撕破口袋,取出所有紙片,檢查自己是否真的有贏的可能性。請你編寫乙...

ACM挑戰程式設計競賽1 1抽籤

試題描述 你的朋友提議玩乙個遊戲 將寫有數字的n 個紙片放入口袋中,你可以從口袋中抽取4 次紙片,每次記下紙片上的數字後都將其放回口袋中。如果這4 個數字的和是m,就是你贏,否則就是你的朋友贏。你挑戰了好幾回,結果一次也沒贏過,於是怒而撕破口袋,取出所有紙片,檢查自己是否真的有贏的可能性。請你編寫乙...