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