这题先是WA了三发,然后感觉不科学,看了下题解,原来自己把题意完全理解错了,
重新改了下,然后莫名其妙RE一发,然后T了三发,早晨醒来去掉几个if语句竟然过了
3000ms超时瞬间变成了3ms,但是我感觉就去掉了几个if语句而已对于总的时间复杂度应该没有
影响的,队友告诉我去掉几个if语句相当于很大的剪枝,弱渣表示刚刚知道。
看了别人的题解,感觉自己的vector代码比别人简单,思路比别人清晰,而且好理解。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cctype>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<ctime>
#define LL __int64
using namespace std;
vector<int> v[29];
int main()
{
int n;
while(cin>>n)
{
string s;
for(int i=0;i<n;i++)
{
v[i].clear();
v[i].push_back(i);
}
while(cin>>s&&s!="quit")
{
int a,b;
string s1;
cin>>a>>s1>>b;
// cout<<s<<' '<<a<<' '<<s1<<' '<<b<<endl;
if(a==b)
continue;
int ax=0,bx=0,ay=0,by=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<(int)v[i].size();j++)
{
if(v[i][j]==a)
{
ax=i;
ay=j;
}
else if(v[i][j]==b)
{
bx=i;
by=j;
}
}
}
// cout<<ax<<' '<<ay<<' '<<bx<<' '<<by<<endl;
if(ax==bx)
{
// cout<<"sb"<<endl;
continue;
}
if(s[0]=='m')
{
for(int i=ay+1;i<(int)v[ax].size();i++)
{
int vv=v[ax][i];
v[vv].insert(v[vv].begin(),vv);
}
v[ax].erase(v[ax].begin()+ay+1,v[ax].end());
}
if(s1[1]=='n')
{
for(int i=by+1;i<(int)v[bx].size();i++)
{
int vv=v[bx][i];
v[vv].insert(v[vv].begin(),vv);
}
v[bx].erase(v[bx].begin()+by+1,v[bx].end());
}
v[bx].insert(v[bx].end(),v[ax].begin()+ay,v[ax].end());
v[ax].erase(v[ax].begin()+ay,v[ax].end());
}
for(int i=0;i<n;i++)
{
cout<<i<<':';
for(int j=0;j<(int)v[i].size();j++)
cout<<' '<<v[i][j];
cout<<endl;
}
}
/*vector<int> a;
a.push_back(1);
a.push_back(2);
vector<int> b;
b.push_back(5);
b.push_back(6);
a.insert(a.begin(),b.begin(),b.end());
a.erase(a.begin());
for(int i=0;i<a.size();i++)
cout<<a[i];*/
return 0;
}