zoukankan      html  css  js  c++  java
  • 算法训练 自行车停放

    资源限制
    时间限制: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 } 

    改进代码

    不用去一个一个去寻找自行车位置,调用<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 } 
  • 相关阅读:
    自定义view分析-Pull-to-Refresh.Rentals-Android
    laucher-icon的加载过程
    android shape 布局文件
    android canvas
    解释器模式(Interpreter)
    中介者模式(Mediator)
    Code obfuscation
    Table Tennis Game 2
    最小公倍数的对数
    C语言基础
  • 原文地址:https://www.cnblogs.com/zq-dmhy/p/12372134.html
Copyright © 2011-2022 走看看