原题目网址: this
题目描述翻译:
对于像abcd这样的字符串a,加号操作是非常明显的,即a+a=abcdabcd,但小米定义了一种新的字符串操作方式,那就是减号操作。
对于两个给定的字符串a和b。
如果a的长度不短于b的长度,那么做a-b,否则做b-a。
a-b的意思是通过引用b从a中去掉最长的序列,之后如果b中还有剩余的字符就做a+b,如果一开始就做b-a就做b+a。
比如说
让我们定义A=aabad和B=abc。
那么A-B就是先通过引用B从A中去掉最长的序列,之后A=aad(在索引1处去掉a,在索引3处去掉b,因为如果能去掉一些字符,我们就会马上去掉)之后B=c
然后做A+B,所以A-B=aadc
更准确的说,只从字符串的开头引用到字符串的结尾,并且只会做一次,例如。
假设A=abc,B=acb 引用操作是先检查A[1],很明显A[1]=B[1]=a 所以把A和B中的a都去掉,然后检查A[2],可以看到A[2]!=B[2],所以我们继续引用,然后可以看到A[3]=B[2]=c 所以我们把A和B中的c都去掉,然后我们可以得到A-B的答案是bb
用的机翻,但是阅读没障碍
这是我的代码:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
string a[1005],b[1005];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
cin>>b[i];
int f=a[i].size();
int s=b[i].size();
if(f>=s)
{
for(int j=0;j<f;j++)
{
for(int l=0;l<=j;l++)
{
if(a[i][j]==b[i][l])
{
a[i][j]='*';
b[i][l]='*';
l=0;
break;
}
}
}
}
if(f<s)
{
for(int l=0;l<s;l++)
{
for(int j=0;j<=l;j++)
{
if(a[i][j]==b[i][l])
{
a[i][j]='*';
b[i][l]='*';
j=0;
break;
}
}
}
}
}
for(int i=1;i<=n;i++)
{
int f=a[i].size();
int s=b[i].size();
if(f>=s)
{
for(int j=0;j<f;j++)
{
if(a[i][j]!='*')
{
cout<<a[i][j];
}
}
for(int l=0;l<s;l++)
{
if(b[i][l]!='*')
{
cout<<b[i][l];
}
}
if(i==n)
return 0;
cout<<"\n";
}
if(f<s)
{
for(int l=0;l<s;l++)
{
if(b[i][l]!='*')
{
cout<<b[i][l];
}
}
for(int j=0;j<f;j++)
{
if(a[i][j]!='*')
{
cout<<a[i][j];
}
}
if(i==n)
return 0;
cout<<"\n";
}
}
return 0;
}
但是评测机显示RE
太菜了,不知道为啥,样例完全正确
求大佬给本蒟蒻康一下吧