Help with Problem C - "binary string reconstruction" from codeforces edu. round 94

Problem link: https://codeforces.com/contest/1400/problem/C?csrf_token=09a6063308209507102341bdebdb4008

please somebody help me with my code for the problem C-Binary String Reconstruction. the code is running fine on the test cases but shoes wrong ans;

Approach- I firstly created a string ans of same size as string s with each element to be ‘a’. Then I itereate over string s and if s[i]==‘0’ then I put ans[i+x] =‘0’ (if i+x is within length of s) and ans[i-x] = ‘0’ (if i-x is within length of s).Then I iterate over s once again ,if s[i]==‘1’ then if ans[i+x]=‘0’ (if i+x is within length of s) and a[i-x]=‘0’ then i set flag as 1; at last iterate over string ans and replace all the remaining ‘a’ with ‘1’; At last if flag=1, print -1 else print ans;

my solution link: https://codeforces.com/contest/1400/submission/91052214

solution:
#include<bits/stdc++.h>
#define endl ‘\n’
#define boost ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);
#define lli long long int
using namespace std;
int main(){
boost;
lli t;
cin>>t;
while(t- -)
{
lli flag=0;
string s;
cin>>s;
lli n;
cin>>n;
string ans(s.size(),‘a’);

   for(lli i=0;i<s.size();i++)
   {
       if (s[i]=='0')
       {
           if (i+n<=s.size()-1)
           {
               
               ans[i+n]='0';
           }
           if (i-n>=0)
           {
               
               ans[i-n]='0';
           }
       }
   }
   
   for (lli i=0;i<s.size();i++ )
   {
       if (s[i]=='1')
       {
           if (i-n>=0 && i+n<=s.size()-1 && ans[i-n]=='0' && ans[i+n]=='0')
           {
               flag=1;
               break;
           }
           
           else if (i-n<0 && i+n<=s.size()-1 && ans[i+n]=='0')
           {
               flag=1;
               break;
           }
           else if (i-n>=0 && i+n>s.size()-1 && ans[i-n]=='0' )
           {
               flag=1;
               break;
           }
           
       }
   }
   
   for (lli i=0;i<s.size();i++)
   {
       if (ans[i]=='a')
       {
           ans[i]='1';
       }
   }
   
   
   if (flag==1)
   {
       cout<<-1<<endl;
   }
   else 
   {
       cout<<ans<<endl;
   }
   
    
} 

}

please help me out.

there will be n substrring .So if you take 1st element then you have to take 3rd element .
so just print all element at odd position

#include<bits/stdc++.h> 
#define endl '\n'
#define boost  ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);
#define lli long long int
using namespace std;
int main(){
    boost;
    lli t;
    cin>>t;
    while(t--)
    {
       lli flag=0;
       string s;
       cin>>s;
       lli n;
       cin>>n;
       string ans(s.size(),'a');
       
       
       for(lli i=0;i<s.size();i++)
       {
           if (s[i]=='0')
           {
               if (i+n<=s.size()-1)
               {
                   
                   ans[i+n]='0';
               }
               if (i-n>=0)
               {
                   
                   ans[i-n]='0';
               }
           }
       }
       
       for (lli i=0;i<s.size();i++ )
       {
           if (s[i]=='1')
           {
               int c=0;
               
               if (i+n<=s.size()-1 && ans[i+n]=='a')
               {
                   c++;
                   
               }
               
               if (i-n>=0 && ans[i-n]=='a' )
               {
                   c++;
               }
               
               if(c==0)
               {
                   flag=1;
                   break;
               }
               
           }
       }
       
       for (lli i=0;i<s.size();i++)
       {
           if (ans[i]=='a')
           {
               ans[i]='1';
           }
       }
       
       
       if (flag==1)
       {
           cout<<-1<<endl;
       }
       else 
       {
           cout<<ans<<endl;
       }
       
        
    }
    
   
}

I did some minute changes in your code in for loop where you were rechecking if s[i]=1.
Here your approach was setting flag=1 if you didn’t find 1 in left and right side i did the same thing but in simple way hope u will understand my changes, in case you didn’t understood changes made by me you can ping me.

1 Like

Bro that was A question.

thanks a lot @maskmanlucifer . I now identified my mistake…thanks for all your help… :star_struck: