# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
175872 | Ruxandra985 | Match (CEOI16_match) | C++14 | 2043 ms | 8800 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#pragma GCC optimize "Ofast"
using namespace std;
int sp[30][100010];
char sol[100010] , s[100010];
int ok;
int stk[100010];
int match (int st , int dr){
int i , elem = 0;
if (st > dr)
return 1;
for (i=0;i<'z' - 'a';++i){
if (((sp[i][dr] - sp[i][st-1]) & 1) == 1)
return 0;
}
for (i=st;i<=dr;++i){
if (stk[elem] == s[i])
elem--;
else stk[++elem] = s[i];
}
return (elem == 0);
}
void solve (int st , int dr){
int i;
if (st > dr)
return;
/// stii ca pe st pui ( , gaseste i match ul
for (i = ( ( (dr & 1) != (st & 1) ) ? dr : dr - 1); i >= st + 1 ; i-=2){
if (s[st] == s[i] && match(st + 1 , i - 1))
break;
}
if (i < st + 1){
ok = 0;
return;
}
else {
sol[st] = '(';
sol[i] = ')';
solve(st + 1 , i - 1);
solve (i + 1 , dr);
}
}
int main()
{
FILE *fin = stdin;
FILE *fout = stdout;
int n , i;
fgets (s+1 , 100010 , fin);
n = 0;
while ( 'a' <= s[n+1] && s[n+1] <= 'z' ){
n++;
s[n]-='a';
for (i=0;i<='z'-'a';++i){
sp[i][n] = sp[i][n-1] + (s[n] == i);
}
}
stk[0] = -1;
if (!match(1 , n)){
fprintf (fout,"-1");
return 0;
}
ok = 1;
solve (1 , n);
fputs (sol+1,fout);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |