點擊開啟連結
剛開始的時候,題意理解錯了。然後在那不停地糾結,網上看別人的部落格,沒有看到把題意說的很清楚的,還有一個翻譯的特別好笑。
在這裡把題意仔細說一下:
在一個n行m列的矩陣裡,每行都有一個矮人雕像和一顆糖果,遊戲目的是讓每一個矮人雕像都得到糖果。現在,讓每一行的矮人雕像同時向右走,當有矮人雕像遇到糖果就停下。
這稱為一個move,注意,注意,一個move可以走多步啊。。(ps:題目中的走到最右端這個條件,完全可以去掉QAQ)
這樣這個題就很清楚了
1:如果存在一行有矮人雕像在糖果的右邊,直接輸出-1
2:每一行的矮人雕像到糖果都有一個距離,把這個距離存到數組裡,也就n個,然後找出數組裡有多少個不一樣的值就OK了。
老外真會玩,這一樣一個題,本來只要會C語言就行了,非要搞來搞去,強行秀英語,也是醉了。
代碼:
#include <iostream>#include <algorithm>using namespace std;char a[1010][1010];int dis[1010];//用來存距離的int main(){ int n,m,count,flag; while(cin>>n>>m) { int temp1,temp2; for(int i=0;i<=n-1;i++) for(int j=0;j<=m-1;j++) cin>>a[i][j]; count=0; flag=1;//標誌量,隨便搞啦 for(int i=0;i<=n-1;i++) { for(int j=0;j<=m-1;j++) { if(a[i][j]=='G') temp1=j; if(a[i][j]=='S') temp2=j; } if(temp2-temp1<0) { flag=0; break; } else { dis[count]=temp2-temp1; count++; } } if(flag==0) { cout<<-1<<endl; continue; } sort(dis,dis+count); int res=1; for(int i=1;i<=count-1;i++)//排個序,再記數 { if(dis[i]!=dis[i-1]) res++; } cout<<res<<endl; } return 0;}