PAT甲級官網 刷題(2)

2021-10-10 19:07:50 字數 2670 閱讀 4347

資料量過大,但是邊數不是很多,稀疏圖,開鄰接表儲存邊,注意使用set來記錄使用的顏色數,pat題目嚴格意義上涉及演算法也不是很多。

#include

#include

#include

#define ac cin.tie(0);cin.sync_with_stdio(0);

using

namespace std;

const

int maxn =

10010

;vector<

int> g[maxn]

;int arr[maxn]

;int n, m, k;

intmain()

cin >> k;

while

(k--

)for

(int i =

0; i < n; i++

)for

(int j:g[i]

)//兩個鄰接點顏色相同,不符合

if(arr[i]

== arr[j])if

(op)

cout << set.

size()

<<

"-coloring"

<< endl;

else

cout <<

"no"

<< endl;

}return0;

}

由於是完全二叉樹,滿足2*k 為節點k的左兒子,2*k+1為節點k的右兒子,所以可以很方便的進行dfs遍歷,同時要求先輸出右邊的路徑,所以優先深度遍歷右兒子,同時最後要求輸出是最大還是最小堆,使用兩個bool變數記錄,如果有乙個兒子比父結點大,就肯定不是大根堆,如果有乙個兒子節點比父結點小,肯定就不是小根堆。

#include

#define ac cin.tie(0);cin.sync_with_stdio(0);

using

namespace std;

const

int maxn =

1010

;//arr為層序遍歷 tmp為儲存的臨時路徑 大小為log(maxn)

int arr[maxn]

, tmp[maxn]

;int n;

bool op1 =

true

, op2 =

true

;void

dfs(

int root,

int k)

cout << tmp[i];}

cout << endl;

return;}

}int

main()

並查集轉換一下輸入,根據愛好建立vector,vector[i]記錄愛好為i的人的編號,然後對愛好i的所有人進行union操作即可。

#include

#include

#include

using

namespace std;

const

int maxn =

1010

;vector<

int> g[maxn]

, ans;

int pre[maxn]

;int n, m, a;

intfind

(int a)

//從大到小排序

bool

cmp(

int&a,

int&b)

intmain()

}for

(int i =

1; i < maxn; i++)}

for(

int i =

1; i <= n; i++)}

printf

("%d\n"

, ans.

size()

);//從大到小排序

sort

(ans.

begin()

, ans.

end(

), cmp)

;for

(int i =

0; i < ans.

size()

; i++

)return0;

}

鞏固不用queue以及遞迴寫寬搜,之後就是簽到題了

#include

#include

using

namespace std;

const

int maxn =

100010

;int arr[maxn]

;vector<

int> g[maxn]

;int n;

double p, r;

intmain()

}int tt =

0, hh =

0, size, cnt;

arr[0]

=0;while

(tt <= hh)

//有根節點就break,找到了最淺的葉子節點

if(cnt)

break;}

printf

("%.4lf %d"

, p, cnt)

;return0;

}

PAT甲級刷題

給定兩個字串s1和s2,刪除s1中在s2 現過的字元設定flag陣列,初始化為0。遍歷s2並將其字元轉化為ascii碼值,並在flag陣列中相應位置值標記為1,表示它出現過。再遍歷s1,若對應字元ascii碼值在flag陣列中相應位置值標記為0,則輸出。就是hash的思想,時間複雜度o len s1...

PAT甲級刷題實錄 1014

這題需要用到佇列,而且不止一條。首先是每個等待視窗各需要一條,另外在黃線外的等待顧客需要一條。c 提供了現成了現成的佇列型別,只要引用標頭檔案queue即可。演算法基本執行過程是 在輸入顧客等待時間時依次填滿每條佇列,超出佇列容量的,即編號大於n m 1的顧客,則push進黃線外的等待佇列中。當有視...

PAT甲級刷題實錄 1008

這題應該是到目前為止最簡單的一道題,評測系統的通過率統計也達到了驚人的0.59。我們需要定義以下用於計算的變數 currentfloor 當前所在的樓層,初始值為0 nextfloor 接下來要前往的樓層,數值通過讀取輸入來確定 totaltime 經過的總時間。因為這題思路實在太簡單了,我也不用自...