精華區beta Marginalman 關於我們 聯絡資訊
題目: 874 walking robot simulation 一個機器人起始在(0,0)並面向+y的方向,給你一串指令 commands,當coomands[i]=-1代 表向右轉,-2代表向左轉,否則代表朝面向方向走的距離,給你一個blockers座標vector 如果機器人的下一步存在該列表中則機器人原地停下,求在過程中最大的x**2+y**2 思路: 照做,先把blockers塞到一個set,每一次移動時看下一步是不是在blockers中,並記錄 每一次移動完x**2+y**2需不需要更新 int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) { int curx=0; int cury=0; int ans=0; set<vector<int>> blockers; for(auto h: obstacles){ blockers.insert(h); } vector<vector<int>> godir={{0,1},{1,0},{0,-1},{-1,0}}; int nowdir=0; for(auto j:commands){ if(j==-1){ nowdir=(nowdir+1)%4; } else if(j==-2){ nowdir=(nowdir+3)%4; } else{ for(int i=0;i<j;++i){ curx+=godir[nowdir][0]; cury+=godir[nowdir][1]; if(blockers.count({curx,cury})){ curx-=godir[nowdir][0]; cury-=godir[nowdir][1]; break; } } ans=max(curx*curx+cury*cury,ans); } } return ans; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.201.58 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1725413856.A.F64.html
Smallsh: 大師 09/04 09:38
dont: 大師 09/04 10:55