题解 | #火车进站#
火车进站
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);
}
#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);
}