Submission #65171

#TimeUsernameProblemLanguageResultExecution timeMemory
65171spencercomptonparentrises (BOI18_parentrises)C++14
50 / 100
216 ms11540 KiB
#include <bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int p, cases; cin >> p >> cases; if(p==1){ for(int z = 1; z<=cases; z++){ string s; cin >> s; bool pos = true; int open = 0; int close = 0; for(int i = 0; i<s.length(); i++){ if(s[i]=='('){ open++; } else{ close++; } if(close>2*open){ pos = false; } } open = 0; close = 0; for(int i = s.length()-1; i>=0; i--){ if(s[i]=='('){ open++; } else{ close++; } if(open > 2*close){ pos = false; } } int n = (int)s.length(); int color[n]; //G = 0, B = 1, R = 2 for(int i = 0; i<n; i++){ color[i] = 0; } open = 0; close = 0; vector<int> op; vector<int> cl; bool ok = true; vector<int> op2; vector<int> cl2; int point = 0; for(int i = 0; i<n; i++){ if(s[i]=='('){ op.push_back(i); open++; } else{ cl.push_back(i); close++; if(close>open){ if(point+2 > cl.size()){ ok = false; break; } cl2.push_back(cl[point++]); cl2.push_back(cl[point++]); close--; } } } int dif = open-close; if(!ok || 2*dif>open){ assert(!pos); cout << "impossible" << endl; continue; } for(int i = 0; i<2*dif; i++){ op2.push_back(op.back()); op.pop_back(); } assert(op2.size()%2==0 && cl2.size()%2==0); for(int i = 0; i<op2.size(); i+=2){ color[op2[i]] = 1; color[op2[i+1]] = 2; } for(int i = 0; i<cl2.size(); i+=2){ color[cl2[i]] = 1; color[cl2[i+1]] = 2; } int bal1 = 0; int bal2 = 0; for(int i = 0; i<n; i++){ if(color[i]==0 || color[i]==1){ if(s[i]=='('){ bal1++; } else{ bal1--; } } if(color[i]==0 || color[i]==2){ if(s[i]=='('){ bal2++; } else{ bal2--; } } if(bal1<0 || bal2<0){ ok = false; } } ok &= bal1==0 && bal2==0; if(!ok){ assert(!pos); cout << "impossible" << endl; continue; } assert(ok); for(int i = 0; i<n; i++){ if(color[i]==0){ cout << "G"; } else if(color[i]==1){ cout << "B"; } else{ cout << "R"; } } cout << endl; } } else{ assert(false); } }

Compilation message (stderr)

parentrises.cpp: In function 'int main()':
parentrises.cpp:17:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i = 0; i<s.length(); i++){
                   ~^~~~~~~~~~~
parentrises.cpp:64:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       if(point+2 > cl.size()){
          ~~~~~~~~^~~~~~~~~~~
parentrises.cpp:85:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i = 0; i<op2.size(); i+=2){
                   ~^~~~~~~~~~~
parentrises.cpp:89:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i = 0; i<cl2.size(); i+=2){
                   ~^~~~~~~~~~~
#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...