算法訓練 自行車停放

資源限制
時間限制:1.0s   內存限制:256.0MB
問題描述
  有n輛自行車依次來到停車棚,除了第一輛自行車外,每輛自行車都會剛好停放在已經在停車棚裏的某輛自行車的左邊或右邊。(e.g.停車棚裏已經有3輛自行車,從左到右編號爲:3,5,1。如今編號爲2的第4輛自行車要停在5號自行車的左邊,因此如今停車棚裏的自行車編號是:3,2,5,1)。給定n輛自行車的停放狀況,按順序輸出最後停車棚裏的自行車編號。
輸入格式
  第一行一個整數n。
  第二行一個整數x。表示第一輛自行車的編號。
  如下n-1行,每行3個整數x,y,z。
  z=0時,表示編號爲x的自行車恰停放在編號爲y的自行車的左邊
  z=1時,表示編號爲x的自行車恰停放在編號爲y的自行車的右邊
輸出格式
  從左到右輸出停車棚裏的自行車編號
樣例輸入
4
3
1 3 1
2 1 0
5 2 1
樣例輸出
3 2 5 1
數據規模和約定
  n<=100000
  自行車編號爲不超過100000的正整數。
 
代碼超時 80
緣由主要是在n很是大的狀況下,在遍歷整個可變長數組的過程當中很費時
 1 #include<iostream>
 2 #include<vector>
 3 //anthor:ZQ
 4 using namespace std;
 5 int main(){
 6     vector<int>obj;
 7     vector<int>::iterator it;
 8     int n,ns,nq,flag,n1;
 9     cin>>n;
10     cin>>n1;
11     obj.push_back(n1);
12     for(int i=1;i<n;i++){
13         cin>>ns>>nq>>flag;
14         for(it=obj.begin();it!=obj.end();it++){
15             if(*it==nq){
16                 if(flag==0){
17                     obj.insert(it,ns);
18                 }else{
19                     obj.insert(it+1,ns);
20                 }
21                 break; 
22             }
23         }
24     }
25     for(it=obj.begin();it!=obj.end();it++){
26         cout<<*it<<" ";
27     }
28     return 0;
29 } 

改進代碼ios

不用去一個一個去尋找自行車位置,調用<algorithm>庫中的函數find()直接鎖定位置數組

代碼:函數

 1 #include<iostream>
 2 #include<vector>
 3 #include<algorithm>
 4 //anthor:ZQ
 5 using namespace std;
 6 int main(){
 7     vector<int>obj;
 8     vector<int>::iterator it;
 9     vector<int>::iterator position;
10     int n,ns,nq,flag,n1;
11     cin>>n;
12     cin>>n1;
13     obj.push_back(n1);
14     for(int i=1;i<n;i++){
15         cin>>ns>>nq>>flag;
16         position=find(obj.begin(),obj.end(),nq);
17         if(flag==0){
18             obj.insert(position,ns);
19         }else{
20             obj.insert(position+1,ns);
21         }
22     }
23 //        for(it=obj.begin();it!=obj.end();it++){
24 //            if(*it==nq){
25 //                if(flag==0){
26 //                    obj.insert(it,ns);
27 //                }else{
28 //                    obj.insert(it+1,ns);
29 //                }
30 //                break; 
31 //            }
32 //        }
33     for(it=obj.begin();it!=obj.end();it++){
34         cout<<*it<<" ";
35     }
36     return 0;
37 } 
相關文章
相關標籤/搜索