20210508 作業檢討

盧冠綸 @ Sprout 2021

2219.成績排名

6004.小普想要讓人進第二階段

2219. 成績排名

2219. 成績排名

思路:

總之,先把所有資料都先cin進來好了...

然後,題目說要找第K名的學生...

那我先把大家的總分做個排序好了。

2219. 成績排名

總之,先把所有資料都先cin進來好了...

在這裡,total[] 陣列是用來存大家的總分。

(這樣我就不用開二維陣列把每人每科的成績都存下來了)

2219. 成績排名

這邊我個人是用bubble sort,當然你用其他種排序法也都可以。

(注意我這裡是從大排到小)

然後,題目說要找第K名的學生...

那我先把大家的總分做個排序好了。

2219. 成績排名

既然說要找第K名的學生...

啊我知道了!第 K 名是 total[K-1] !

第一名是 total[0] ,第二名是 total[1] ......

6004. 小普想要讓人進第二階段(名字太長了啦)

6004. 小普想要讓人進第二階段

思路:

一樣先把大家的成績都cin進來好了。

再來有Q行的區間,要我找三種分數在這區間的人分別有幾個。

那...每輸入一次區間,我就分別數一次有幾個人在這個區間內...

6004. 小普想要讓人進第二階段

吃了TLE...

qq...

6004. 小普想要讓人進第二階段

重新來過好了... 來想個快一點的方法!

原本的方法: (這裡令N為學生數,Q為問題數)

1.先把大家的成績都cin進來。         ( O(N) )

 

2.再來有Q行的問題(上下限)。每輸入一行問題,就分別數一次有幾個人在這些上下限內。           ( O(QN) )

看來是O(QN)這邊太大了...趕快想想我們這禮拜交過什麼...

6004. 小普想要讓人進第二階段

看來是O(QN)這邊太大了...趕快想想我們這禮拜交過什麼...

啊!如果我先把每個人的成績排序好,

再試著用二分搜尋法找上下界呢?

分析一下:

1.cin每個人的成績: O(N)

2.排序每個人的成績: O(N^2)

3.對每個問題用二分搜尋法找有幾個人在上下限內: O(Q log N)

好像可行哦~

6004. 小普想要讓人進第二階段

1.cin每個人的成績: O(N)

2.排序每個人的成績: O(N^2)

6004. 小普想要讓人進第二階段

3.對每個問題用二分搜尋法找有幾個人在上下限內: O(Q log N)

6004. 小普想要讓人進第二階段

3.對每個問題用二分搜尋法找有幾個人在上下限內: O(Q log N)

6004. 小普想要讓人進第二階段

所以全部的main程式大概是長這個樣子。

6004. 小普想要讓人進第二階段

複習一下:

 

1.cin每個人的成績: O(N)

2.排序每個人的成績: O(N^2)

3.對每個問題用二分搜尋法找有幾個人在上下限內: O(Q log N)

20210508作業檢討

By allen522019

20210508作業檢討

  • 332