2018北京網路賽A題

2021-08-29 05:00:35 字數 818 閱讀 2227

一道搜尋題寫了好久沒寫出來

一直拖到現在才補起來

題目不難 只是有一些地方以前沒注意過

現把幾點要注意的指出來

一:因為每一次移動可能耗時1也可能耗時2 所以不能用單純的佇列 需要用優先順序佇列

二:因為氧氣罐數量的不同而導致狀態的不同 需要三維的陣列來記錄狀態

三:為了**的簡潔 把v陣列的判斷和賦值操作放到了取出狀態的時候 而不是放在加入狀態的時候

四:注意從一而終 要麼在進入房間之前結算 要麼在出房間之前結算 不能二者結合 乙個寫搜尋題易犯的錯誤

五:氧氣罐最多5個 乙個小小需要注意的地方

#includeusing namespace std;

const int n=105;

int n,m;

struct node

bool operator <(const node &r)const

};char mp[n][n];

bool v[n][n][10];

int d[4][2];

int bfs(int i,int j)

else if(mp[tx][ty]=='b')

else if(mp[tx][ty]=='.'||mp[tx][ty]=='s')

else if(mp[tx][ty]=='p')

else if(mp[tx][ty]=='#'&&tp.d)}}

}return -1;

}int main()

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

}return 0;

}

acm 2018北京網路賽B題

這個題的題意就是給n n 10個字串,長度不超過8,但是n個字串每乙個都可以組成乙個環,然後求這n個字串的最長公共子串行 我的做法就是使用位運算遍歷。朱學長要打我.就是每一位就是乙個0 1,來遍歷,這樣就比for迴圈遍歷快很多,然後分別使用map來存同時要避免在每個字串中子串出現次數大於1,然後再用...

2015北京網賽 G Boxes bfs

題目大意 給你n n 8 個互不相同的數,問進行多少次操作後能讓這些數變成公升序,無法變成就輸出 1,具體操作是,每個數只能每次只能移動到與他相鄰的空位或者比他大的數上。如 2,1,3 可以通過 2,1 3 2,1 3 1 2 3 1,2,3 這4次變換達到。思路 就是狀態壓縮之後的bfs了,用乙個...

icpc 北京網路賽 1006 貪心演算法

網路賽結束,看了大神的 以後才寫出來的,這是一道貪心演算法,選區域性最優方案 就是相鄰兩個點不能直接到達做特別討論。易證 如果兩個點不能直接到達,那麼每次讓青蛙走兩步到達 l 1 的距離是最優選擇,如果現在青蛙的位置是now 那麼到達now 的那一步走了step,然後對now 後面的那個點進行討論 ...