题目:
假设S为优秀01序列:
则:
1) 若T也为优秀01序列,则S+T或T+S也为优秀序列。
2)S的反码序列,开头的0全部去掉后,rev(S)也为优秀序列,如:
S:11010 rev(S)=101.
现在要求输入:
一个整数N,表示输入多少组S和T序列,
接下来依次输入每组的S,T,判断各组的T是否为优秀01序列,若是,输出YES,否则输出NO。
(默认S是优秀01序列)
例子:
2
110
110001
11
0110
NO
NO
代码:
#include<string>
#include<iostream>
using namespace std;
bool compare(string a,string str, int start);
string rev(string s);
int main(){
int n;
string s,t;
cin>>n;
cin>>s>>t;
string re= rev(s);
int size_s=s.size();
int size_tt=t.size();
int size_re=re.size();
bool tag=false;
int i=0;
for( ;i<size_tt;){
cout<<"i="<<i<<", ";
if(compare(t,s,i)){
i += size_s;
cout<<"+size_s ->"<<i<<endl;
}
else if(compare(t,re,i)){
i += size_re;
cout<<"+size_re; ->"<<i<<endl;
}
else {
tag = true;
break;
}
}
if((tag&&i<size_tt)||(i>size_tt)) cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
return 0;
}
bool compare(string a,string str, int start){
for(int i=start;i<a.size()&&i<str.size()+start;i++)
if(a[i]!=str[i]) return false;
return true;
}
string rev(string s){
string tem="";
int st=-1;
for(auto it:s){
char ch=it-'0'?'0':'1';
if(st==-1&&ch=='0') continue;
else if(ch=='1') st=0;
tem+=ch;
}
cout<<"rev="<<tem<<endl;
return tem;
}
编者注:以上来自今年8月的网易笔试真题。
431



被折叠的 条评论
为什么被折叠?



