Source Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {

    ios_base::sync_with_stdio(0);
    cout.tie(0); cout.tie(0);


    int tt = 1;
    while(tt--){

        int n , x , y , z;
        cin >> n >> x >> y >> z;
        string a , b , s , ans(n , '.');
        cin >> a >> b >> s;

        bool ok = 1;
        for(int i = 0 ; i < n ; i++){
            if(a[i] == '0' && b[i] == '0' && s[i] == '1')
                ok = 0;
        }
        for(int i = 0 ; i < n ; i++){
            if(a[i] != b[i] && s[i] == '0'){
                if(x > 0) {
                    x--;
                    ans[i] = '&';
                }
                else ok = 0;
            }
        }
        for(int i = 0 ; i < n ; i++){
            if(a[i] == '1' && b[i] == '1' && s[i] == '0'){
                if(z > 0){
                    z--;
                    ans[i] = '^';
                }
                else ok = 0;
            }
        }
        // x , y , z
        //and , or , xor
        for(int i = 0 ; i < n ; i++){

            if(ans[i] != '.') continue;

            if(a[i] == '1' && b[i] == '1' && s[i] == '1' && x > 0){
                ans[i] = '&';
                x--;
            }
        }
        for(int i = 0 ; i < n ; i++){

            if(ans[i] != '.') continue;

            if(a[i] != b[i] && s[i] == '1' && z > 0){
                ans[i] = '^';
                z--;
            }
        }
        for(int i = 0 ; i < n ; i++){

            if(ans[i] != '.') continue;

            if(a[i] != b[i] && s[i] == '1'){
                if(y > 0) {
                    ans[i] = '|';
                    y--;
                }
                else ok = 0;
            }
            if(a[i] == '1' && b[i] == '1' && s[i] == '1' && y > 0){
                if(y > 0){
                    ans[i] = '|';
                    y--;
                }
                else ok = 0;
            }
        }
        for(int i = 0 ; i < n ; i++){
            if(ans[i] == '.'){
                if(x > 0)
                    ans[i] = '&' , x--;
                else if(y > 0)
                    ans[i] = '|' , y--;
                else if(z > 0)
                    ans[i] = '^' , z--;
                else ok = 0;
            }
        }
        if(!ok){
            return cout << "NO",0;
        }
        cout << "YES\n";
        cout << ans;
    }
    return 0;
}
Copy
Binary String Greedious
GNU G++17
15 ms
1.2 MB
Accepted