【2019.4.3】
刚受过信号与系统的灵魂洗礼,回来AC了这道题,
看编译群里吵来吵去,感觉有几句题外话想说,
就大学里这点破事,大家无外乎就是为了成绩,
世界上没有公平的事情,尤其是涉及到利益,一件也没有,
永远有那么多糟心的事、傻逼的人让我们苦恼,
但反抗永远与适应并存,
算法实验考试网崩了,在群里要求重考的同时,争取下次一遍过,
平时分自己挣,从老师手里抢,
勇士队被cp3吹掉了一场比赛,不仅要骂,下一场还要四十分赢回来,
登哥号称哈七公,场均36分带队赢球就完事了,
#最黑暗的世界逼出最强的我
#the underrated tour
#include <iostream>
#include <vector>
#include <cctype>
using namespace std;
void command(vector<vector<int>>& v, string s1, int n1, string s2, int n2);
void output(vector<vector<int>> v);
void findIndex(vector<vector<int>> v, int n, int& ni, int& nj);
void returnBlock(vector<vector<int>>& v, int n, int ni, int nj);
int main()
{
int n;
cin>>n;
vector<vector<int>> block(n);
for(int i=0; i<n; i++) block[i].push_back(i);
getchar();
string s1, s2;
int n1, n2;
while(cin>>s1 && s1[0]!='q') {
cin >> n1 >> s2 >> n2;
command(block, s1, n1, s2, n2);
}
output(block);
return 0;
}
void command(vector<vector<int>>& v, string s1, int n1, string s2, int n2)
{
int i1, j1, i2, j2;
findIndex(v, n1, i1, j1);
findIndex(v, n2, i2, j2);
if(i1<0 || i2<0 || i1 == i2) return;
if(s1=="move" && s2=="onto")
{ //还原n1和n2上所有方块
//cout<<'1'<<endl;
returnBlock(v, n1, i1, j1);
returnBlock(v, n2, i2, j2);
}
else if(s1=="move" && s2=="over")
{ //还原n1上方块
//cout<<'2'<<endl;
returnBlock(v, n1, i1, j1);
}
else if(s1=="pile" && s2=="onto")
{ //还原n2上方块
//cout<<'3'<<endl;
returnBlock(v, n2, i2, j2);
}
for(int j=j1; j<v[i1].size(); j++)
v[i2].push_back(v[i1][j]);
int popNum = v[i1].size()-j1;
while(popNum--)
v[i1].pop_back();
}
void findIndex(vector<vector<int>> v, int n, int& ni, int& nj)
{
for(int i=0; i<v.size(); i++)
for(int j=0; j<v[i].size(); j++)
if(v[i][j] == n) {
ni = i;
nj = j;
return;
}
return;
}
void returnBlock(vector<vector<int>>& v, int n, int nx, int ny)
{
int x;
for(int j=v[nx].size()-1; j>ny; j--) {
x=v[nx][j];
v[x].push_back(x);
v[nx].pop_back();
}
}
void output(vector<vector<int>> v)
{
for(int i=0; i<v.size(); i++) {
printf("%d:", i);
for(int j=0; j<v[i].size(); j++)
printf(" %d", v[i][j]);
cout<<endl;
}
}