//刚开始写这道题,还是对这些东西不熟悉呀。
//都是自己的不够努力,不能怪其他的东西;
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
string a1,b1;
int stack1[20],i,flag1[20];
cin>>a1>>b1;
memset(stack1,0,sizeof(stack1));
memset(flag1,0,sizeof(flag1));
int a2=a1.length();
int b2=b1.length();
for(i=0;i<a2;i++)
{
stack1[i]=a1[i]-'0';
flag1[stack1[i]]=i;
}
int flag=0;
for(i=0;i<b2;i++)
{
if(i+1<b2)
{
if(flag1[b1[i]-'0']<flag1[b1[i+1]-'0'])
{
flag=1;
break;
}
}
}
if(flag==0)
{
cout<<"Yes."<<endl;
for(i=a2-1;i>=0;i--)
{
cout<<"in"<<endl;
}
for(i=b2-1;i>=0;i--)
cout<<"out"<<endl;
}
if(flag==1)
{
cout<<"No."<<endl;
}
cout<<"FINISH"<<endl;
}
}
对题意的曲解:
完全是错误的方向
下面的是WA的代码;
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
string a1,b1;
int stack1[20],i=0,flag1[20],j=0,k=0,top=0;
cin>>a1>>b1;
stack1[top]=a1[0];
flag1[0]=1;
// top++;
while(j<n&&i<n)
{
if(top>=0&&b1[i]==stack1[top])
{
k++;
i++;
flag1[k]=2;
top--;
}
else
{
stack1[++top]=a1[++j];
flag1[++k]=1;
}
}
if(j==n)
{
cout<<"No."<<endl;
}
else
{//输出进出栈方式
cout<<"Yes."<<endl;
for(i=0; i<=k; i++)
{
if(flag1[i]==1)
cout<<"in"<<endl;
if(flag1[i]==2)
cout<<"out"<<endl;
}
}
cout<<"FINISH"<<endl;
}
return 0;
}