Advertisement
AyAks69

A-B_palindrome

Oct 14th, 2022 (edited)
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.50 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define lli long long int
  4.  
  5. int main()
  6. {
  7.     ios_base::sync_with_stdio(false);
  8.     cin.tie(NULL);
  9.     int t;
  10.     cin >> t;
  11.     while(t--)
  12.     {
  13.         lli ag,bg;
  14.         cin >> ag >> bg;
  15.         string s;
  16.         cin >>s;
  17.         for(lli i=0; i<s.size(); i++)
  18.         {
  19.             if(s[i]=='0')
  20.             {
  21.                 ag--;
  22.             }
  23.             else if(s[i]=='1')
  24.             {
  25.                 bg--;
  26.             }
  27.         }
  28.         for(lli i=0; i<(s.size()/2); i++)
  29.         {
  30.             if((s[i]=='?')&&(s[(s.size()-1)-i]!='?'))
  31.             {
  32.                 lli pos=(s.size()-1)-i;
  33.                 if(s[pos]=='1')
  34.                 {
  35.                     s[i]='1';
  36.                     bg--;
  37.                 }
  38.                 else if(s[pos]=='0')
  39.                 {
  40.                     s[i]='0';
  41.                     ag--;
  42.                 }
  43.             }
  44.             if((s[i]!='?')&&(s[(s.size()-1)-i]=='?'))
  45.             {
  46.                 lli pos=(s.size()-1)-i;
  47.                 if(s[i]=='1')
  48.                 {
  49.                     s[pos]='1';
  50.                     bg--;
  51.                 }
  52.                 else if(s[i]=='0')
  53.                 {
  54.                     s[pos]='0';
  55.                     ag--;
  56.                 }
  57.             }
  58.         }
  59.         for(lli i=0; i<(s.size()/2); i++)
  60.         {
  61.             lli pos=(s.size()-1)-i;
  62.             if((s[i]=='?')&&(s[pos]=='?'))
  63.             {
  64.                 if(ag>=2)
  65.                 {
  66.                     s[i]='0';
  67.                     s[pos]='0';
  68.                     ag-=2;
  69.                 }
  70.                 else if(bg>=2)
  71.                 {
  72.                     s[i]='1';
  73.                     s[pos]='1';
  74.                     bg-=2;
  75.                 }
  76.             }
  77.         }
  78.         if((s.size())%2)
  79.         {
  80.             lli pos = s.size()/2;
  81.             if(s[pos]=='?')
  82.             {
  83.                 if(ag>0)
  84.                 {
  85.                     s[pos]='0';
  86.                     ag--;
  87.                 }
  88.                 else if(bg>0)
  89.                 {
  90.                     s[pos]='1';
  91.                     bg--;
  92.                 }
  93.             }
  94.         }
  95.         string s2=s;
  96.         reverse(s2.begin(),s2.end());
  97.         size_t pos_q = s.find_first_of('?');
  98.         if((s2==s)&&(pos_q==std::string::npos)&&(ag==0)&&(bg==0))
  99.         {
  100.             cout << s <<"\n";
  101.         }
  102.         else
  103.         {
  104.             cout << -1 <<"\n";
  105.         }
  106.  
  107.     }
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement