Submission #63064

# Submission time Handle Problem Language Result Execution time Memory
63064 2018-07-31T14:55:58 Z bazsi700 Match (CEOI16_match) C++14
10 / 100
47 ms 704 KB
#include <bits/stdc++.h>
using namespace std;

#define MOD 1000000007
#define ll long long int
#define vi vector<int>
#define vii vector< vector<int> >
#define PI 3.1415926535897932384626433832795
#define INF 9223372036854775807LL

//13:45

int cnt[2005][26];
vector<set<int> > occ(26);
string s;
int n;

bool solve(int from, int to) {
	if(from > to) {
		return true;
	}
	if((to-from)%2 == 0) {
		return false;
	}
//	cout << from << " " << to << endl;
	for(int i = 0; i < 26; i++) {
		if((cnt[to][i]-(from == 0 ? 0 : cnt[from-1][i]))%2) {
		//	cout << cnt[to][i] << endl;
		//	cout << i << endl;
			return true;
		}
	}
	int star = s.at(from)-'a';
	auto it = occ[star].upper_bound(to);
	it--;
	while(*it > from) {
		//cout << *it << " " << from << endl;
		bool s1 = solve(from+1,*it-1);
		if(!s1) {
			it--;
			continue;
		}
		bool s2 = solve(*it+1,to);
		if(!s2) {
			it--;
			continue;
		}
		return true;
	}
	//cout << *it << " " << from << endl;
	return false;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> s;
	n = s.length();
	for(int i = 0; i < n; i++) {
		if(i != 0) {
			for(int j = 0; j < 26; j++) {
				cnt[i][j] = cnt[i-1][j];
			}
		}
		occ[s.at(i)-'a'].insert(i);
		cnt[i][s.at(i)-'a']++;
	}
	//cout << solve(0,n-1) << endl;
	bool an = solve(0,n-1);
	if(!an) {
		cout << -1;
		return 0;
	}
	//return 0;
	if(n > 18) {
		return 0;
	}
	string str = "-1";
	for(int mask = 0; mask < (1<<n); mask++) {
		stack<int> st;
		bool good = true;
		string currstr = "";
		for(int i = 0; i < n; i++) {
			if(mask&(1<<i)) {
				st.push(i);
				currstr+= '(';
			} else {
				currstr+= ')';
				if(st.empty()) {
					good = false;
					break;
				}
				if(s.at(st.top()) != s.at(i)) {
					good = false;
					break;
				}
				st.pop();
			}
		}
		if(!st.empty()) {
			good = false;
		}
		if(good) {
			if(str.at(0) == '-' || str > currstr) {
				str = currstr;
			}
		}
	}
	cout << str;
	vector<int> cnt2(260,0);
	return 0;
}

# Verdict Execution time Memory Grader output
1 Correct 3 ms 248 KB Output is correct
2 Correct 47 ms 484 KB Output is correct
3 Correct 13 ms 548 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 248 KB Output is correct
2 Correct 47 ms 484 KB Output is correct
3 Correct 13 ms 548 KB Output is correct
4 Incorrect 5 ms 704 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 248 KB Output is correct
2 Correct 47 ms 484 KB Output is correct
3 Correct 13 ms 548 KB Output is correct
4 Incorrect 5 ms 704 KB Output isn't correct
5 Halted 0 ms 0 KB -