close
Content
安迪很喜歡木製的軌道,每一天他爸爸組合一個新的軌道給他,這個軌道必須沒有死路,也就是說這個軌道是個環,可以讓車子永無止境的跑下去。
所以這裡有一個問題,給你一些軌道片段,你是否可以用全部給你的軌道片段拼成一個環形軌道。
每一個軌道有兩端,一個標準的軌道片段的兩端為"male"跟 "female",但是也有一些的兩端都是 "male"或 "female",如圖
每兩塊連結方式一定要一端是male另一端是 female,不能兩個相同male或是 female連接。這不是真實的木製軌道,所以每一個軌道片段不考慮其長度,形狀。
Input
第一行代表幾組測試資料,每一行都代表一組的測試資料,這一行包含1~50個軌道片段,一片的兩端以M跟F來表示,M= male, F=female ,每兩個軌道以空白隔開。
Output
對於每個測試資料,印出是否可以拼成一個環,若可以請輸出 "LOOP"不行則輸出 "NO LOOP"。
Sample Input #1
4 MF MF FM FF MF MM MM FF MF MF MF MF FF
Sample Output #1
LOOP LOOP LOOP NO LOOP
C++
#include <iostream> #include <sstream> using namespace std; int main() { int t; string s; char head,tail; cin>>t; getline(cin,s);//在使用cin跟getline中間需要清除cin後的緩衝區 while (t--) { bool loop=true; int len=0; getline(cin,s);//讀入整行測資(含空白跟換行符號) if (s[0]==s[s.size()-1]) //假設一行裡有五塊,檢查第一塊的頭跟第五塊的尾巴是否一一樣 {loop=false;} else{ stringstream ss(s); ss>>s; //倒入第一塊給s len=1; //所以長度0->1 tail=s[s.size()-1]; while (ss>>s) //倒入第二三四塊塊給s { head=s[0]; //第二三四塊的頭都給head len++; // if (head==tail) { loop=false; break; } tail=s[s.size()-1]; } //if(len>1&&loop==true){cout<<"LOOP\n";} ->寫在這裡的話,第19行的if用不到 //else{cout << "NO LOOP\n";} } if(len>1&&loop==true){cout<<"LOOP\n";} else{cout << "NO LOOP\n";} } return 0; }
python:
t=int(input()) for _ in range(t): loop=True track_len=0 arr=input() arr0=list(arr[::1]) arr1=list(arr.split()) #print(arr0) #print(arr1) #print("arr0[0]",arr0[0]) #print("arr0[-1]",arr0[-1]) if arr0[0]==arr0[-1]:loop=False if len(arr1)==1:loop=False else: track_len=1 tail=arr0[-1] #print('tail',tail) for i in arr1: track_len+=1 head=i[0] #print('head',head) if head==tail:loop=False;break tail=i[-1] if track_len>1 and loop==True:print("LOOP") else:print("NO LOOP")
文章標籤
全站熱搜
留言列表