思路
这个题目,徽章的类型其实就是每放满一次栈,就将栈里的徽章放给上面的格子。最开始我用一个n的数组存盒子编号,但是查找很费力,后两个点直接超时。因为数据并不算大,为了查找方便,这次直接开了个100000的数组,25分get
#include<iostream>
#include<stack>
#include<vector>
using namespace std;
int main()
{
int n, size, temp;
cin >> n >> size;
//存入盒子数据,同时记录对应于放入的次序,因为全部初始化为0,所以记录i+1
int book[100000] = { 0 };
for (int i = 0; i < n; i++)
{
cin >> temp;
book[temp] = i + 1;
}
//存入盒子次序对应的勋章种类
stack<int> st;
vector<int> arr(n);
int j = 0;
for (int i = 0; i < n; i++)
{
cin >> temp;
st.push(temp);
//每size个就倒序存入
if (st.size() == size)
{
while (!st.empty())
{
arr[j] = st.top();
st.pop();
j++;
}
}
}
//i=n-1时结束,但还有最后一波数据未放入
if (st.size() == size)
{
arr[j] = st.top();
st.pop();
j++;
}
int z;
cin >> z;
while (z--)
{
cin >> temp;
if (book[temp] != 0)
{
//从arr中取出盒子对应的徽章
cout << arr[book[temp] - 1] << endl;
}
else
{
cout << "Wrong Number\n";
}
}
}