链接
题意:
给出你一个01串,让你从中选取两端 [ l 1 , r 1 ] , [ l 2 , r 2 ] [l_1,r_1],[l_2,r_2] [l1,r1],[l2,r2], ( l 1 , r 1 ) (l_1,r_1) (l1,r1)不能同时与 ( l 2 , r 2 ) (l_2,r2) (l2,r2)相等,。要求两个串转化成十进制 f 1 = w ∗ f 2 f1=w*f2 f1=w∗f2,两个长度大于等于 l e n / 2 len/2 len/2
分析:
首先我们从题意中看出,我们需要找倍数关系,然后我们看0,如果一个数后几位都相等,一个串前面+一个0,那么他俩还相等,如果前几位相等在一个串后面+一个0那么,是2倍的关系。
如果没有0出现,那么我们只需要截取相同长度的1即可,这样他们是相等的。
string str;
void solve()
{
cin>>n>>str;
str=" "+str;
for(int i=n;i>n/2;i--){
if(str[i]=='0'){
cout<<1<<" "<<i<<" "<<1<<" "<<i-1<<endl;
return;
}
}
for(int i=n/2;i>=1;i--){
if(str[i]=='0'){
cout<<i<<" "<<n<<" "<<i+1<<" "<<n<<endl;
return ;
}
}
cout<<1<<" "<<n-1<<" "<<2<<" "<<n<<endl;
}