题解 | #火车进站#

火车进站

http://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109

7辆火车及以下的用例可以通过,8辆火车及以上的用微软VS2022计算要等1分钟以上才算出结果,证明算法是正确的,只是8辆火车以上运算时间太长导致在牛客网上通不过。
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int>> a(vector<int>b)
{
    if(b.size()==2)
    {
        vector<vector<int>>c;
        vector<int>d;
        d.push_back(b[1]);
        d.push_back(b[0]);
        c.push_back(b);
        c.push_back(d);
        return(c);
    }
    vector<vector<int>>f,p;
    int h=b.back();
    b.pop_back();
    vector<int>g(b);
    f=a(g);
    for(int i=0;i<f.size();i++)
    {
        vector<int> o;
        for(int j=0;j<f[i].size();j++)
        {
            for(int m=0;m<j;m++)
            {
                o.push_back(f[i][m]);
            }
            o.push_back(h);
             for(int m=j;m<f[i].size();m++)
            {
                o.push_back(f[i][m]);
            }
        p.push_back(o);
            o.clear();
        }
            o=f[i];
            o.push_back(h);
            p.push_back(o);
    }
    return(p);
}
int main()
{
    int u;
    while(cin>>u)
    {
        vector<int>v,y;
        for(int i=0;i<u;i++)
        {
            int w;
            cin>>w;
            v.push_back(w);
        }
        vector<vector<int>>x,xxx;
        xxx=a(v);
        x=xxx;
        for(int j=0;j<x.size();j++)
        {
            vector<int>xx,vv;
            vv=v;
            while(max(vv.size(),xx.size()))
            {
                if(xx.size()>0)
                {
            if(xx.back()==x[j][0])
            {
                xx.pop_back();
               x[j].erase(x[j].begin());
            }
            else 
            {
                while(vv.size())
                {
         if(vv[0]!=x[j][0])
         {
             xx.push_back(vv[0]);
             vv.erase(vv.begin());
         } 
            else
            {
              vv.erase(vv.begin());
                x[j].erase(x[j].begin());
                break;
            }
        }
            }
           
            }    
               else if(xx.size()==0)
                {
                while(vv.size())
                {
         if(vv[0]!=x[j][0])
         {
             xx.push_back(vv[0]);
             vv.erase(vv.begin());
         } 
            else
            {
              vv.erase(vv.begin());
                x[j].erase(x[j].begin());
                break;
            }
        }
            }
                if(xx.size()>0)
                {
   if(xx.back()!=x[j][0]&&vv.size()==0)
                {
                    x.erase(x.begin()+j);
                     xxx.erase(xxx.begin()+j);
                    j--;
                    break;
                }
                }
            }
        }
    for(int i=0;i<u;i++)
    {
        for(int j=0;j<xxx.size()-1;j++)
        {
            for(int m=j+1;m<xxx.size();m++)
            {
                if(i==0)
                {
                   if(xxx[j][i]>xxx[m][i])
                {
                    swap(xxx[j],xxx[m]);
                }  
                }
               else if(i>0)
                {
        
            for(int n=0;n<=i;n++)
            {
                if(xxx[j][n]!=xxx[m][n]&&n<i)
                {
                
                   break;
                }
                else if(xxx[j][n]>xxx[m][n]&&n==i)
                {
                    swap(xxx[j],xxx[m]);
                }
            }
                }
            }
        }
    }
        for(int i=0;i<xxx.size();i++)
        {
            for(int j=0;j<xxx[i].size();j++)
            {
                cout<<xxx[i][j]<<' ';
            }
            cout<<endl;
        
        }
    }
    return(0);
    }


全部评论

相关推荐

求个公司要我:接好运
点赞 评论 收藏
分享
10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务