제출 #259396

#제출 시각아이디문제언어결과실행 시간메모리
259396doowey괄호 문자열 (CEOI16_match)C++14
10 / 100
1 ms384 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; #define fi first #define se second #define mp make_pair #define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); const int AL = 26; const int N = (int)1e5 + 10; int id[N]; int pref[N]; map<int, vector<int>> gg[AL]; char sol[N]; void compute(int l, int r){ if(l > r) return; int mask = pref[l - 1]; int vi = upper_bound(gg[id[l]][mask].begin(), gg[id[l]][mask].end(), r) - gg[id[l]][mask].begin(); vi -- ; if(vi < 0 || vi >= gg[id[l]][mask].size()) { cout << "-1\n"; exit(0); } int idx = gg[id[l]][mask][vi]; if(idx > l && idx <= r){ sol[l] = '('; sol[idx] = ')'; compute(l + 1, idx - 1); compute(idx + 1, r); } else{ cout << "-1\n"; exit(0); } } int main(){ fastIO; string t; cin >> t; char f; int n = t.size(); for(int i = 1; i <= n; i ++ ){ f = t[i - 1]; id[i] = f - 'a'; pref[i]=(pref[i-1] ^ (1 << id[i])); gg[id[i]][pref[i]].push_back(i); } compute(1, n); for(int i = 1; i <= n; i ++ ) cout << sol[i]; cout << "\n"; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

match.cpp: In function 'void compute(int, int)':
match.cpp:27:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(vi < 0 || vi >= gg[id[l]][mask].size()) {
                  ~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...