제출 #270684

#제출 시각아이디문제언어결과실행 시간메모리
270684wutwereIgra (COCI17_igra)C++17
100 / 100
1 ms384 KiB
#include <bits/stdc++.h>
using namespace std;
using ll=int64_t;
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define _F(i,a,b,s) for(int i=(a);((s)>0?i<(b):i>(b));i+=(s))
#define _1(e) _F(i,0,e,1)
#define _2(i,e) _F(i,0,e,1)
#define _3(i,b,e) _F(i,b,e,(b)<(e)?1:-1)
#define _G(a,b,c,d,e,...) e
#define FOR(...) _G(__VA_ARGS__,_F,_3,_2,_1)(__VA_ARGS__)

int s[3], m[3];
string letter = "abc";
map<char, int> num = {{'a', 0}, {'b', 1}, {'c', 2}};

bool check(int x, int y) {
	if (!s[x]) return 0;
	s[x]--;
	m[y]--;
	bool ret = 1;
	FOR (i, 3) {
		int tot = 0;
		FOR (j, 3) {
			if (j != i) {
				tot += s[j];
			}
		}
		ret &= tot >= m[i];
	}
	s[x]++;
	m[y]++;
	return ret;
}

int main() {
	ios::sync_with_stdio(0),cin.tie(0);
	int n; cin >> n;
	string a, b; cin >> a >> b;
	FOR (i, n) {
		s[num[a[i]]]++;
	}
	FOR (i, n) {
		m[num[b[i]]]++;
	}
	vector<char> ans;
	FOR (i, n) {
		FOR (j, 3) {
			if (letter[j] != b[i] && check(j, num[b[i]])) {
				s[j]--;
				m[num[b[i]]]--;
				ans.pb(letter[j]);
				break;
			}
		}
	}
	FOR (i, n) cout << ans[i];
}
#Verdict Execution timeMemoryGrader output
Fetching results...