3.栈序列(stack.cpp)
【问题描述】
给出两个序列 入栈 和 出栈 ,栈内元素取值从 1 到 n。现在我们给出 q 次询问,对于每 个询问:包含入栈和出栈两个序列。已知入栈序列是 pushed,如果出栈序列有可能是 popedd 则输出 1,否则输出 0,并将每个询问的答案 依次从左到右排列,把得到的串视为一个二进制 数,(注意,这个数可能很大)输出这个二进制数 mod 100007 的值。
【输入格式】输入文件名为 stack.in。
第一行一个整数 q,询问次数。
接下来 q 个询问,对于每个询问:
第一行一个整数 n 表示序列长度;
第二行 n 个整数表示入栈序列 pushed;
第二行 n 个整数表示出栈序列 poped;
【输出格式】输出文件名为 stack.out。
一个整数,为按要求输出的答案。
【输入输出样例 1 】
stack.in
2
5
1 2 3 4 5
5 4 3 2 1
4
1 2 3 4
2 4 1 3
stack.out
2
【样例说明】
第一次询问得到 1,第二次询问得到 0,按从左到右的顺序排列为 10,对应的二进制数为 2。
【输入输出样例 2 】
stack.in
4
5
3
1 3 2
2 1 3
4
4 1 2 3
2 4 1 3
2
2 1
1 2
5
5 1 2 4 3
1 2 5 3 4
3
3 1 2
3 1 2
stack.out
7
【数据说明】
对于 100% 的数据,1<=q<=1000,1<=n<=9;
#include<bits/stdc++.h>
using namespace std;
string s;
int binTo(string str){
int len=str.length();
int n=0;
for(int i=1;i<=len;++i)
{
if(str[i]=='1')
n+=pow(2,len-1-i);
}
return n;
}
int main(){
int q;
cin>>q;
for(int i=1;i<=q;i++)
{
int n;
int a[100001],b[100001];
stack<int>st;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
cin>>b[i];
int head=1;
for(int i=1;i<=n;i++)
{
st.push(a[i]);
while(st.top()==b[head])
{
st.pop();
head++;
if(st.empty())
break;
}
}
if(st.empty()){
s[i]='1';
}
else {
s[i]='0';
}
}
cout<<binTo(s);
}
大佬查查错,样例1输出0