POJ 1230 解題報告

2021-07-10 04:23:47 字數 1275 閱讀 5915

這道題感覺就是greedy的題。但是還是看了解題報告。知道做法後實現很簡單,只需要注意測試資料中有左端點的x座標大於右端點的x座標的情況,調換下即可。

貪心的策略是按照x從左往右掃瞄,如果某一列(某乙個x值)對應(被覆蓋)的牆的個數cnt大於k,那麼需要從這些牆中刪掉cnt - k 個。刪除的順序是將牆按照右端點的x值從大到小的順序排序,按順序刪除。

這樣做的大致思路是因為對每個「覆蓋牆」我們不用考慮其左端點(因為左邊的所有列已經是滿足條件的),右端點大的覆蓋的右邊的x多,所以先刪除。這不是個證明。證明請參考其他資料。

因為牆的個數很少(100個以下),所以實現的時候都是最*****的方法逐個掃瞄判斷是否覆蓋當前x。因為每次都需要牆是按照右端點x值排序,所以提前一次把牆排序好。

thestoryofsnow

1230

accepted

164k

0msc++

1946b

/* 

id: thestor1

lang: c++

task: poj1230

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

const int maxn = 100;

class wall

wall(int x1, int x2, int y) : x1(x1), x2(x2), y(y), removed(false) {}

inline bool operator> (const wall &rhs) const };

int main()

walls[i].removed = false;

} sort(walls, walls + n, std::greater());

// printf("[debug]walls:\n");

// for (int i = 0; i < n; ++i)

// int nremoved = 0;

for (int x = 0; x <= 100; ++x)}}

// if some walls need to be removed

if (cnt > k)}}

}} printf("%d\n", nremoved);

}return 0;

}

HDU 1230解題報告

problem description 讀入兩個不超過25位的火星正整數a和b,計算a b。需要注意的是 在火星上,整數不是單一進製的,第n位的進製就是第n個素數。例如 地球上的10進製數2,在火星上記為 1,0 因為火星個位數是2進製的 地球上的10進製數38,在火星上記為 1,1,1,0 因為火...

poj解題報告 1328

不得不說,這題是讓我飽受折磨,畢竟第一次做貪心演算法,而且wa了好多次,幸好有學長的幫助,最終找到了問題所在,是在快排上是問題,double高位不可向int低位轉換,由於一開始強制轉換導致雖然樣例和其他的測試資料過了,但還是wa,現在改完了就對了,附上ac ps 這題通過率是22 真心不簡單 如下 ...

poj解題報告 2586

這題我是用的貪心演算法,其實不用也可以,列舉也能解決,因為情況不多。因為是每連續5個月必有虧損,而一年只有1 5,2 6,3 7,4 8 8 12共8種情況。現在設盈餘為s,虧損為d,可列出以下幾種情況。ssssdssssdss 4ssssddsssddss 3s 2d ssdddssdddss 2...