hdu 4022map和list等資料結構的應用

2022-08-17 22:57:19 字數 1831 閱讀 5304

這題還是挺好的,想了好久才想出做法。做法的大體思想其實就是暴力刪點,用了乙個布林陣列(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...