제출 #263238

#제출 시각아이디문제언어결과실행 시간메모리
263238kimbj0709괄호 문자열 (CEOI16_match)C++14
37 / 100
2083 ms23164 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define maxn 100050
int lastpos[maxn][26];
string input;
vector<int> out(maxn,0);
int right(int r,char c){
  if(lastpos[r][c-'a']!=-1){
    //return lastpos[r][c-'a'];
  }
  int ret = -1;
  if(r-2>=0&&input.at(r)==input.at(r-1)){
    if(input.at(r-2)==c){
      ret = r-2;
    }
    else{
      ret = right(r-2,c);
    }
  }
  else{
    int pos = right(r-1,input.at(r))-1;;
    if(input.at(pos)==c){
      ret = pos;
    }
    else{
      ret = right(pos,c);
    }
  }
  lastpos[r][c-'a'] = ret;
  return ret;
}
void recursive(int l,int r){
  if(l>=r){
    return;
  }
  if(input.at(l)==input.at(r)){
    out[r] = 1;
    recursive(l+1,r-1);
    return;
  }
  int pos = right(r,input.at(l));
  out[pos] = 1;
  recursive(l+1,pos-1);
  recursive(pos+1,r);
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);cout.tie(0);
  cin >> input;
  stack<int> stack1;
  stack1.push(0);
  for(int i=1;i<input.length();i++){
    if(stack1.size()!=0&&input.at(stack1.top())==input.at(i)){
      stack1.pop();
    }
    else{
      stack1.push(i);
    }
  }
  if(stack1.size()!=0){
    cout << -1;
    return 0;
  }
  for(int i=0;i<26;i++){
    for(int j=0;j<input.length();j++){
      lastpos[j][i] = -1;
    }
  }
  recursive(0,input.length()-1);
  for(int i=0;i<input.length();i++){
    if(out[i]==1){
      cout << ')';
    }
    else{
      cout << '(';
    }
  }
 
}

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

match.cpp: In function 'int32_t main()':
match.cpp:53:16: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |   for(int i=1;i<input.length();i++){
      |               ~^~~~~~~~~~~~~~~
match.cpp:66:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |     for(int j=0;j<input.length();j++){
      |                 ~^~~~~~~~~~~~~~~
match.cpp:71:16: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |   for(int i=0;i<input.length();i++){
      |               ~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...