列表

详情


NC200319. Nitori and Stack-Tech

描述

Nitori擅长制作各种各样精巧的道具。

这一天,Nitori找来n个不同的零件放在桌子上,将它们排列成一排,接着她便拿出一个被她称为“栈”的神奇道具,这个道具可以将无数多个零件放进去,并且也可以按照与放入顺序相反的顺序将零件取出来(即后放入的零件必须先取出来),并且她还可以只取出一部分后继续放入其它的零件,而不必一次性全部取完。

Nitori十分喜爱这个叫做“栈”的道具,今天,她想用“栈”将桌上的零件调整一下排列顺序,她会把桌上的零件从左到右依次放入“栈”中,并且在任意时刻,她都可以将若干个先前放进栈中的零件取出(需要按照“栈”的后入先出顺序),并从左到右在桌子上摆放出来。

她想知道是否可能将桌上物品的排列s,通过上述操作,转化为另一种排列t。


输入描述

第一行输入一个正整数n,表示n个零件。
第二行输入一个长度为n,由不同小写字母组成的字符串s,表示初始从左到右排列的n种零件。
第三行输入一个长度为n,由不同小写字母组成的字符串t,表示Nitori希望得到的排列。

数据规范:
* .
* 所有字符串保证只含有小写字母。

输出描述

如果能够通过“栈”将排列s变成t,则输出,反之输出。(不包含双引号,大小写任意)

示例1

输入:

1
a
o

输出:

No

示例2

输入:

1
c
c

输出:

Yes

示例3

输入:

7
abcedfh
aecbfdh

输出:

Yes

说明:

如果使用u表示入栈,使用o表示出栈,则此组数据可通过操作:
uouuuooouuoouo
从s排列得到t排列。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang11) 解法, 执行用时: 7ms, 内存消耗: 376K, 提交时间: 2020-11-18 20:05:41

#include<stdio.h>
int main(void)
{
	char str1[27];char str2[27];
	char fa[27];
	int a;int n;int i=0;int ii=0;
	scanf("%d",&n);
	scanf("%s",&str1);
	scanf("%s",&str2); 
	for(a=0;a<n;a++)
	{
		fa[i]=str1[a];i++;
		while(fa[i-1]==str2[ii]&&i>0)
		{
			ii++;i--;
		}
	}
	if(ii==n)printf("Yes");
	else printf("No");
}

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 468K, 提交时间: 2020-06-14 12:21:35

#include<bits/stdc++.h>
using namespace std;
int n;
string s, t;
stack<char>st;
int main()
{
	cin >> n >> s >> t;
	for(int i = 0, j = 0; i < n; i++)
	{
		st.push(s[i]);
		for(; !st.empty() && st.top() == t[j]; j++, st.pop());
	}
	puts(st.empty() ? "Yes" : "No");
}

Python3(3.5.2) 解法, 执行用时: 21ms, 内存消耗: 3552K, 提交时间: 2020-06-15 08:48:31

n=int(input())
a=input()
b=input()
a1=[]
i=0
t=0
while i<n:
    a1.append(a[i])
    if a1[-1]==b[t]:
        t+=1
        a1.pop()
    while len(a1) and a1[-1]==b[t]:
        t+=1
        a1.pop()
    i+=1
if t==n:
    print("Yes")
else:
    print("No")

C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 488K, 提交时间: 2020-06-18 00:03:48

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int i,j=0,t=0,n;
	char R[30],T[30],S[30];
	scanf("%d%s%s",&n,R,T);
	for(i=0;i<n;i++)
	{
		S[++t]=R[i];
		while(t&&T[j]==S[t])t--,j++;
	}
	if(!t)printf("Yes\n");
	else printf("No\n");
}

上一题