傳送門::: http://acm.hdu.edu.cn/showproblem.php?pid=1022
簡單的模擬....+stl 水過
不過方法很挫啊.
#include <iostream>
#include <stack>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
char str1[15],str2[15];
int n,i,k;
while(~scanf("%d %s%s",&n,str1,str2))
{
stack<char> s;
i=k=0;
bool flag=false;
while(true)
{
if(s.empty()&&k!=n)
{
s.push(str1[i]);
}
else if(str2[k]!=s.top())
{
i++;
s.push(str1[i]);
}
else if(str2[k]==s.top())
{
k++;s.pop();
if(s.empty())i++;
}
if(i==n&&k!=n){flag=true;break;}
if(s.empty()&&k==n)break;
}
if(flag)
cout<<"No."<<endl<<"FINISH"<<endl;
else
{
cout<<"Yes."<<endl;
i=k=0;
while(true)
{
if(s.empty()&&k!=(strlen(str2)))
{
s.push(str1[i]);
cout<<"in"<<endl;
}
else if(str2[k]!=s.top())
{
i++;
s.push(str1[i]);
cout<<"in"<<endl;
}
else if(str2[k]==s.top())
{
k++;s.pop();
cout<<"out"<<endl;
if(s.empty())i++;
}
if(s.empty()&&k==strlen(str2))break;
}
cout<<"FINISH"<<endl;
}
}
return 0;
}
不甘心啊,又寫了一個優化版的 0MS過(上面是15MS過)
#include <iostream>
#include <stack>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
char str1[15],str2[15];
int ans[15];
int n,i,k,h;
while(~scanf("%d %s%s",&n,str1,str2))
{
stack<char> s;
i=k=h=0;
bool flag=false;
for(i=0;i<15;i++)ans[i]=0;i=0;
while(true)
{
if(s.empty()&&k!=n)
{
s.push(str1[i]);ans[h]=1;h++;
}
else if(str2[k]!=s.top())
{
i++;
s.push(str1[i]);ans[h]=1;h++;
}
else if(str2[k]==s.top())
{
k++;s.pop();h++;
if(s.empty())i++;
}
if(i==n&&k!=n){flag=true;break;}
if(s.empty()&&k==n)break;
}
if(flag)
cout<<"No."<<endl<<"FINISH"<<endl;
else
{
cout<<"Yes."<<endl;
i=0;
for(i=0;i<h;i++)
{
if(!ans[i])cout<<"out"<<endl;
else cout<<"in"<<endl;
}
cout<<"FINISH"<<endl;
}
}
return 0;
}