#644. NOIP2014TG-27

NOIP2014TG-27

当前没有测试数据。

27.(完善程序)

(双栈模拟数组)只使用两个栈结构 stack1stack1stack2stack2,模拟对数组的随机读取。作为栈结构,stack1stack1stack2stack2 只能访问栈顶(最后一个有效元素)。栈顶指针 top1top1top2top2 均指向栈顶元素的下一个位置。

输入第一行包含两个整数,分别是数组长度 nn 和访问次数 mm,中间用单个空格隔开。

第二行包含 nn 个整数,依次给出数组各项(数组下标从 00n1n-1)。

第三行包含 mm 个整数,需要访问的数组下标。对于每次访问,输出对应的数组元素。

(前两空每空 2.52.5 分,其余每空 33 分,共 1414 分)

#include<iostream>
using namespace std;

const int SIZE=100;

int stack1[SIZE],stack2[SIZE];
int top1,top2;
int n,m,i,j;

void clearStack(){
  int i;
  for(i=top1;i<SIZE;i++)
    stack1[i]=0;
  for(i=top2;i<SIZE;i++)
    stack2[i]=0;
} 

int main(){
  cin>>n>>m;
  for(i=0;i<n;i++)
    cin>>stack1[i];
  top1=____________________;
  top2=____________________;
  for(j=0;j<m;j++){
    cin>>i;
    while(i<top1-1){
      top1--;
      ____________________;
      top2++;
    }
    while(i>top1-1){
      top2--;
      ____________________;
      top1++;
    }
    clearStack();
    cout<<stack1[____________________]<<endl;
  }
  return 0;
}

①:{{ input(1) }}

②:{{ input(2) }}

③:{{ input(3) }}

④:{{ input(4) }}

⑤:{{ input(5) }}