這題還是挺好的,想了好久才想出做法。做法的大體思想其實就是暴力刪點,用了乙個布林陣列(deleted)來記錄在執行乙個請求前某點是否已被刪除(所以在點結構體中加了乙個變數id以唯一標識乙個點)。我是用了兩個鍊錶存了兩份點(lx, ly),乙份先按x再按y排序,另乙份先按y再按x排序。然後用乙個mapx存下lx中不同x值開始的位置。(同理得mapy)。對於乙個刪除x=d的請求,可以直接從mapx中讀出x=d在鍊錶中的起始位置,然後乙個個地刪,一邊刪一邊記錄在deleted陣列中就可以了。同理可以處理y=d的情況。
這題最讓我記憶深刻的地方是我在打**的時候有個地方犯了乙個小錯誤死迴圈了沒輸出結果,然後除錯,發現map裡存的iterator都不對,各種稀奇古怪的問題,最後才發現那是eclipse的bug,無語了。
/** hdu 4022/win.cpp
* created on: 2012-11-9
* author : ben */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 100100
;typedef
struct
mpmp;
mp mp[maxn];
bool
deleted[maxn];
inline
bool cmpx(const mp &m1, const mp &m2)
return m1.x }inline
bool cmpy(const mp &m1, const mp &m2)
return m1.y }map
mapx, mapy;
intmain()
for(int i = 0; i < n; i++)
list
lx, ly;
sort(mp, mp +n, cmpx);
copy(mp, mp +n, back_inserter(lx));
sort(mp, mp +n, cmpy);
copy(mp, mp +n, back_inserter(ly));
list
::iterator it =lx.begin();
it =lx.begin();
mapx.clear();
while(it !=lx.end())
it++;
}it =ly.begin();
mapy.clear();
while(it !=ly.end())
it++;
}memset(deleted,
false, sizeof
(deleted));
for(int i = 0; i < m; i++)
it++;}}
}else
it++;}}
}printf(
"%d\n
", ans);
}putchar('\n
');}
return0;
}
遍歷map和list(自己用)
遍歷map 1.這是最常見的並且在大多數情況下也是最可取的遍歷方式。在鍵值都需要時使用。mapmap new hashmap for map.entryentry map.entryset 2.在for each迴圈中遍歷keys或values。mapmap new hashmap 遍歷map中的鍵...
Gson解析(List和Map)格式json資料
主要解析 兩種格式 列 式 和 map格式 常用的是列表解析,以前不知道解析map,就用json配合gson使用,今天在論壇看到有人問,就試了一下才發現 解析map也很方便,哇喔,又漲姿勢了。public class jsonparse public static void main string ...
模板中 List 和 Map 的遍歷
最近一段時間在整乙個專案,裡面用到很多知識點,其中有 freemarker,以前沒用過,花一段時間來研究。使用 freemarker 根據模板生成靜態頁面時,經常會在頁面中顯示數值,list或者map形式的。下面的 是我在專案中執行成功的 歡迎高手指點優化。list toptendoclist?if...