标签:c代码 程序 int http 语法 str pac include 作用
vetor常用函数引自:https://blog.csdn.net/qq_42070580/article/details/96773579
①删除单个元素。
serase(it)即删除迭代器为it处的元素。
②删除一个区间内的所有元素。
erase(frist, last)即删除[frist, last) 内的所有元素。
begin()函数的作用为取vi的首元素地址。end() 函数取的是尾元素地址的下一个地址。(左闭右开)
初始时从左到右有n个木块,编号为0~n-1,要求实现下列四种操作:
一组数据的结束标志为"quit",如果有非法指令(a和b在同一堆),应当忽略。
输入
输入由1个整数n开始开始,该整数独占一行,表示积木世界中的积木数量。你可以假定0 < n < 25。 从积木数量值的下一行开始是一系列的命令,每条命令独占一行。你的程序要处理所有的命令直到输入退出命令。 你可以假定所有的命令都按上文所示的格式给出。不会出现语法错误的命令。
输出
以积木世界的最终状态作为输出。每一个原始积木的位置i(0 ≤ i < n,n为积木数量)后面都要紧跟一个冒号。
如果至少有一个积木在该位置上,冒号后面都要紧跟一个空格,然后是该位置上所有积木编号的序列。每2个积木的编号之间以一个空格隔开。行尾不能出现多余的空格。 每个积木位置独占一行(即第一行输入的n,对应输出n行数据)。
样例输入
10 move 9 onto 1 move 8 over 1 move 7 over 1 move 6 over 1 pile 8 over 6 pile 8 over 5 move 2 over 1 move 4 over 9 quit
1 void release(int m){ 2 int i=zht[m][0],j=zht[m][1]; 3 while(a[i].size()-1>j){int x=a[i][a[i].size()-1]; a[i].pop_back(); zht[x][0]=x; zht[x][1]=0; a[x].push_back(x); } 4 } 5 6 void moved(string s,int m,string cmd,int n){ 7 if(zht[m][0]==zht[n][0]) return; 8 if (s[0]==‘m‘) release(m); 9 if (cmd[1]==‘n‘) release(n); 10 11 int ia=zht[m][0],ib=zht[n][0],ja=zht[m][1]; 12 int x1=zht[m][1]-1; 13 while(ja<a[ia].size()){ 14 int x=a[ia][ja]; 15 a[ib].push_back(x); zht[x][0]=ib; zht[x][1]=a[ib].size()-1; 16 ja++; 17 } 18 19 if (x1!=-1) release(a[ia][x1]); else { release(m); a[ia].pop_back(); } //此时release的zht中记录的是已经更新后的zht,因此要换一种做法 20 } 21
while((int)a[ia].size()-1>x1) a[ia].pop_back();
#include<bits/stdc++.h> using namespace std; int n0; int zht[30][2];//记录此时积木的位置 vector <int> a[30]; int reads(string m){//将字符转化为数字 int a=0; for (int i=0;i<m.length();i++) a=a*10+m[i]-48; return a; } void release(int m){//将m号积木上方积木放回原位 int i=zht[m][0],j=zht[m][1]; while(a[i].size()-1>j){int x=a[i][a[i].size()-1]; a[i].pop_back(); zht[x][0]=x; zht[x][1]=0; a[x].push_back(x); } } void moved(string s,int m,string cmd,int n){ if(zht[m][0]==zht[n][0]) return; if (s[0]==‘m‘) release(m); if (cmd[1]==‘n‘) release(n); int ia=zht[m][0],ib=zht[n][0],ja=zht[m][1]; int x1=zht[m][1]-1; while(ja<a[ia].size()){ int x=a[ia][ja]; a[ib].push_back(x); zht[x][0]=ib; zht[x][1]=a[ib].size()-1; ja++; } while((int)a[ia].size()-1>x1) a[ia].pop_back();//移动过的积木清除 } int main(){ cin>>n0; string s,cmd; int m=0,n=0; for (int i=0;i<=n0;i++) {zht[i][0]=i; zht[i][1]=0; a[i].push_back(i);} while(cin>>s,s!="quit"){ string cmd,a1,b1; cin>>a1>>cmd>>b1; m=reads(a1);n=reads(b1); moved(s,m,cmd,n); } for (int i=0;i<n0;i++) { cout<<i<<":"; for(int j=0;j<a[i].size();j++) cout<<" "<<a[i][j]; cout<<endl; } return 0; }
2019-12-20
STL:Vector 例题:UVA 101(积木问题) The Blocks Problem
标签:c代码 程序 int http 语法 str pac include 作用
原文地址:https://www.cnblogs.com/master-fiora/p/12038858.html