POJ 1208 The Blocks Problem G++

    技术2022-08-01  59

    #include <iostream> #include <cstdio> #include <vector> #include <map> using namespace std; //英语 看博友分析 抄博友程序 模拟 vector<int> ve[30]; map<int,int> mp; int n; void hy(int x) { //cout<<"huanyuan "<<x<<endl; int y=mp[x]; int i; for(i=0;i<ve[y].size();i++) { //cout<<"hi"<<endl; int t=ve[y][i]; if(t==x) { break; } } int ti=i+1; for(i=i+1;i<ve[y].size();i++) { //cout<<"hi1"<<endl; int t=ve[y][i]; ve[t].push_back(t); mp[t]=t; } ve[y].resize(ti);//ac /* for(int i=ti;i<ve[y].size();i++)//mle { //cout<<"hi2"<<endl; ve[y].pop_back(); }*/ /* for(int i=0;i<n;i++) { cout<<i<<": "; for(int j=0;j<ve[i].size();j++) { int t=ve[i][j]; cout<<t<<" "; } cout<<endl; }*/ } void lei(int x, int y) { //cout<<"lei "<<x<<" "<<y<<endl; int tx=mp[x]; int ty=mp[y]; if(tx==ty) { return; } //cout<<tx<<" "<<ty<<endl; int i; for(i=0;i<ve[tx].size();i++) { //cout<<"hi"<<endl; int t=ve[tx][i]; if(t==x) { break; } } int ti=i; //return; for(;i<ve[tx].size();i++) { //cout<<"hi1"<<endl; int t=ve[tx][i]; ve[ty].push_back(t); mp[t]=ty; } ve[tx].resize(ti);//抄博友程序 ac /* for(int i=ti;i<ve[tx].size();i++)//mle { //cout<<"hi2"<<endl; ve[tx].pop_back(); }*/ /* for(int i=0;i<n;i++) { cout<<i<<": "; for(int j=0;j<ve[i].size();j++) { int t=ve[i][j]; cout<<t<<" "; } cout<<endl; }*/ } int main() { cin>>n; for(int i=0;i<n;i++) { ve[i].push_back(i); mp[i]=i; } while(1) { string a,b; int x,y; cin>>a; if(a=="quit") { for(int i=0;i<n;i++) { cout<<i<<": "; for(int j=0;j<ve[i].size();j++) { int t=ve[i][j]; cout<<t<<" "; } cout<<endl; } break; } cin>>x>>b>>y; //cout<<a<<" "<<x<<" "<<b<<" "<<y<<endl; if(a=="move" && b=="onto") { hy(x); hy(y); lei(x,y); }else if(a=="move" && b=="over") { hy(x); lei(x,y); }else if(a=="pile" && b=="onto") { hy(y); lei(x,y); }else if(a=="pile" && b=="over") { lei(x,y); } /* for(int i=0;i<n;i++) { cout<<i<<": "; for(int j=0;j<ve[i].size();j++) { int t=ve[i][j]; cout<<t<<" "; } cout<<endl; }*/ } return 0; }

     

    Processed: 0.017, SQL: 9