Submission #115829

#TimeUsernameProblemLanguageResultExecution timeMemory
115829RockyBPaint By Numbers (IOI16_paint)C++17
10 / 100
2057 ms19320 KiB
/// In The Name Of God

#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

#include <bits/stdc++.h>

#define f first
#define s second

#define pb push_back
#define pp pop_back
#define mp make_pair

#define sz(x) (int)x.size()
#define sqr(x) ((x) * 1ll * (x))
#define all(x) x.begin(), x.end()

#define rep(i, l, r) for (int i = (l); i <= (r); i++)

#define Kazakhstan ios_base :: sync_with_stdio(0), cin.tie(0), cout.tie(0);

#define nl '\n'
#define ioi exit(0);

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;

const int N = (int)4e5 + 7;
const int inf = (int)1e9 + 7;
const int mod = (int)1e9 + 7;
const ll linf = (ll)1e18 + 7;

const int dx[] = {-1, 0, 1, 0, 1, -1, -1, 1};
const int dy[] = {0, 1, 0, -1, 1, -1, 1, -1};

using namespace std;

int n, k;
int pref[N];

vector <int> a;

string s, t;


set <char> st[N];
void rec(int v = 0) {
	if (v == n) {
		int cnt = 0;
		vector <int> cur;
		rep(i, 0, sz(t) - 1) {
			if (t[i] == 'X') {
				++cnt;
			}
			if (t[i] != 'X' || i + 1 == sz(t)) {
				if (cnt) {
					cur.pb(cnt);
					cnt = 0;
				}
			}
		}
		//assert(0);
		//for (auto it : cur) cout << it << ' ';
		//cout << nl;
		if (cur == a) {
			rep(i, 0, sz(t) - 1) {
				st[i].insert(t[i]);
			}
		}
		return;
	}
	if (s[v] == '.') {
		t[v] = 'X';
		rec(v + 1);
		t[v] = '_';
		rec(v + 1);
	}
	else rec(v + 1);
}
string solve_puzzle(string S, vector <int> c) {
	n = sz(S);
	s = S;
	a = c;
	k = sz(c);
	// --- coppying

	t = s;
	rec();
	rep(i, 0, n - 1) {
		if (sz(st[i]) > 1) t[i] = '?';
		else t[i] = *st[i].begin();
	}
	return t;
}

#ifdef IOI2018

const int S_MAX_LEN = 200 * 1000;
char buf[S_MAX_LEN + 1];

int main() {
	freopen ("in.txt", "r", stdin);
	freopen ("slow.out", "w", stdout);
    assert(1 == scanf("%s", buf));
    std::string s = buf;
    int c_len;
    assert(1 == scanf("%d", &c_len));
    std::vector<int> c(c_len);
    for (int i = 0; i < c_len; i++) {
        assert(1 == scanf("%d", &c[i]));
    }
    std::string ans = solve_puzzle(s, c);


    printf("%s\n", ans.data());
    return 0;
}

#endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...