題意簡述:在一個b*a的矩形框內,有n個機器人,告訴其初始位置及方向。
現有m條指令,每條指令可能是轉向或者向前走一步。
試判斷有沒有衝突或者撞牆的情況。
解題思路:模擬
題目鏈接:http://162.105.81.212/JudgeOnline/problem?id=2632
//模擬 #include<iostream> using namespace std; struct robot{ int x,y; //x:機器人所在行; y:所在列 int pr; //當前方向 }rob[102]; int map[102][102]; int a,b; //a:地圖的列 b:行 int rob1,rob2; //記錄二個機器人的序號 int pree(char i)//求解方向 { switch(i) { case 'E': return 0; case 'S': return 1; case 'W': return 2; case 'N': return 3; } } bool move(int num,int pr,int cc) { int x=0,y=0,bu=0; map[rob[num].x][rob[num].y]=0; if(pr=='F')//如果是向前移動 { switch(rob[num].pr) { case 0:rob[num].y+=cc;x=rob[num].x;bu=cc;break; case 1:rob[num].x+=cc;y=rob[num].y;bu=cc;break; case 2:rob[num].y-=cc;x=rob[num].x;bu=-cc;break; case 3:rob[num].x-=cc;y=rob[num].y;bu=-cc;break; } if(x!=0)//行不變 { if(bu<0)//向西移動 { //i初始值表示:rob【num】的此次未移動前的列標減 1 //i的終點是1 或rob【num】.y(移動後的位置) //i 的值減減知道遇到map中的rob(機器人) 就return false; for(int i=rob[num].y-bu-1;i>=1&&i>=rob[num].y;i--) if(map[x][i]!=0) { rob1=num; rob2=map[x][i];return false;} if(rob[num].y<1) {rob1=num;return false;} } else if(bu>0)//向東移動 { for(int i=rob[num].y-bu+1;i<=a&&i<=rob[num].y;i++) if(map[x][i]!=0) { rob1=num; rob2=map[x][i];return false;} if(rob[num].y>a) {rob1=num;return false;} } } else//列不變 { if(bu<0) { for(int i=rob[num].x-bu-1;i>=1&&i>=rob[num].x;i--) if(map[i][y]!=0) { rob1=num; rob2=map[i][y];return false;} if(rob[num].x<1) {rob1=num;return false;} } else if(bu>0) { for(int i=rob[num].x-bu+1;i<=b&&i<=rob[num].x;i++) if(map[i][y]!=0) { rob1=num; rob2=map[i][y];return false;} if(rob[num].x>b) {rob1=num;return false;} } } map[rob[num].x][rob[num].y]=num; } else { cc%=4; if(pr=='L') { rob[num].pr=(rob[num].pr-cc+4)%4; } else { rob[num].pr=(rob[num].pr+cc)%4;} } return true; } int main() { int t,num,cc;; int n,m,x,y; bool flag; char pr; cin>>t; while(t--) { cin>>a>>b; cin>>n>>m; memset(map,0,sizeof(map)); for(int i=1;i<=n;i++) { cin>>y>>x>>pr; map[b-x+1][y]=i; rob[i].pr=pree(pr); rob[i].x=b-x+1;rob[i].y=y; } rob1=rob2=0; flag=true;//rob1和rob2值付 0 for(int i=1;i<=m;i++) { cin>>num>>pr>>cc; if(!flag) continue; flag=move(num,pr,cc); } if(flag) cout<<"OK"<<endl; else if(rob2==0) //rob2==0表示沒有撞到rob(機器人)。 cout<<"Robot "<<rob1<<" crashes into the wall"<<endl; else cout<<"Robot "<<rob1<<" crashes into robot "<<rob2<<endl; } return 0; }
參加工作一段時間,發現自己很多算法都忘了,爲了彌補一下自己的缺陷,所以決定每天堅持寫一些小算法。加油! ------------------------------------------------------------------
電子紙的定義 電子紙(ePaper)是新一代的顯示裝置,與我們常見一般纖維紙不同,其是一種包含“微小球體”的“導電高分子”材料,其外表、特性跟我們平時使用的紙張一樣,具有柔軟度又可重複顯示資料。電子紙材料需要是電的導體,電子紙使用高分
代碼如下: #include <stdio.h> #include<math.h> #include <string.h> int gcd(int a,int b); int main() { int N,i,j,count; i
問:在VC編譯代碼過程中,Generating Code...的作用是什麼? 答:Generating Code...是用來產生連接用到的文件,但是不是所有的CPP文件都會產生這個,有一些CPP一起作用纔可以產生一些類似於OBJ文件這種。
Story of RAM I'm RAM, working at a desktop computer.Being so absent-minded , I know nothing about where I came from,
隨機交換內容可以看這:http://blog.csdn.net/lgnlgn/article/details/5936945 其實是直接翻譯作者perl源碼過來的... 作者perl源碼在這:http://www.cs.helsinki
超級傳送門:http://acm.hdu.edu.cn/showproblem.php?pid=1754 分析:用線段樹來保存學生成績,每次更新區間最大值即可。 代碼: #include<cstdio> #define lson l,
商務智能是一套完整的解決方案,它是將數據倉庫、聯機分析處理(OLAP)和數據挖掘等結合起來應用到商業活動中,從不同的數據源收集數據,經過抽取(Extract)、轉換(Transform)和加載(Load),送入到數據倉庫或數據集市,然後使
隨着IT信息化的高速發展,企業產生大量的業務數據,這些數據放在ERP、CRM、OA等不同系統中,相互之間隔離,且數據口徑也往往不一致,需要花費大量的時間進行數據處理。而,依託於BI系統能夠將這些零散的”數據”轉換成有價值的”信息”,從而
隨着商業智能市場的日益成熟,將有三個新的發展趨勢。今年商業智能領域,仍然是盤整上升的趨勢。這種趨勢是良性還是惡性呢?目前已經能夠看出一些端倪。在所有發展中有三個發展趨勢將對未來技術產生巨大的影響,儘管目前還無法判斷到底有多大影響。 趨勢一
情景再現: 現在有某大型連鎖超市的一整年的經營數據,分析師要將這些數據以一張報表的形式呈現給不同的人來看,分別是公司的CXO,業務線的管理者還有一線的業務人員。顯然,這些人關注的核心數據是不一樣的。CXO作爲公司的決策層,會關注這
窗口截圖,可以獲取遮擋窗口完整的圖像,並保存到bmp文件中去。主要用到的函數中PrintWindow,VC6不支持該函數,請使用VS2008來編譯。其它需求如平臺要求請參考MSDN文檔。 view plain void
⑴淺複製(淺克隆) 被複制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。換言之,淺複製僅僅複製所考慮的對象,而不復制它所引用的對象。 ⑵深複製(深克隆) 被複制對象的所有變量都含有與原來的對象相同的
首先要說的是,所謂不規則位圖的繪製,意思是說一張位圖(位圖永遠是規則的),上面有個不規則圖形,把這張位圖繪製到某一界面上時,要求只繪製位圖上那個不規則圖形,其它地方保持背景不變。比如說畫個太陽,不能把太陽所在的矩形的背景全