Submission #667602

#TimeUsernameProblemLanguageResultExecution timeMemory
667602LoboHomework (CEOI22_homework)C++17
100 / 100
192 ms202300 KiB
#include<bits/stdc++.h>
using namespace std;
const long long inf = (long long) 1e18 + 10;
const int inf1 = (int) 1e9 + 10;
#define int long long
#define dbl long double
#define endl '\n'
#define sc second
#define fr first
#define mp make_pair
#define pb push_back
#define all(x) x.begin(), x.end()
const int maxn = -1;

vector<int> rs;
string s;
pair<int,pair<int,int>> sol(int l, int r) {
    if(l == r) {
        return mp(1,mp(1,1));
    }
    int l1 = -1;
    for(int i = l+1;;i++) {
        if(rs[i] != -1) {
            l1 = i;
            break;
        }
    }
    int r1 = rs[l1];
    auto aux1 = sol(l1,r1);
    int sz1 = aux1.fr;
    int mn1 = aux1.sc.fr;
    int mx1 = aux1.sc.sc;


    int l2 = -1;
    for(int i = r1+1;;i++) {
        if(rs[i] != -1) {
            l2 = i;
            break;
        }
    }
    int r2 = rs[l2];
    auto aux2 = sol(l2,r2);
    int sz2 = aux2.fr;
    int mn2 = aux2.sc.fr;
    int mx2 = aux2.sc.sc;

    int sz = sz1+sz2;
    int mn,mx;
    if(s[l-1] == 'n') {
        mn = min(mn1,mn2);
        mx = mx1+mx2;
    }
    else {
        mn = mn1+mn2;
        mx = min(mx1,mx2);
    }
    return mp(sz,mp(mn,mx));
    return mp(0,mp(0,0));
}
void solve() {
    cin >> s;

    stack<int> ls;
    for(int i = 0; i < s.size(); i++) {
        rs.pb(-1);
        if(s[i] == '(') {
            ls.push(i);
        }
        else if(s[i] == ')') {
            rs[ls.top()] = i;
            ls.pop();
        }
        else if(s[i] == '?') {
            rs[i] = i;
        }
    }

    for(int i = 0; i < s.size(); i++) {
        if(rs[i] != -1) {
            // cout << i << " " << rs[i] << endl;
        }
    }

    int l = -1;
    for(int i = 0;; i++) {
        if(rs[i] != -1) {
            l = i;
            break;
        }
    }
    auto aux = sol(l,s.size()-1);
    int sz = aux.fr;
    int mn = aux.sc.fr;
    int mx = aux.sc.sc;
    cout << sz-(mn-1)-(mx-1) << endl;
}

int32_t main() {
    ios::sync_with_stdio(false); cin.tie(0);

    // freopen("in.in", "r", stdin);
    // freopen("out.out", "w", stdout);
    int tt = 1;
    // cin >> tt;
    while(tt--) {
        solve();
    }

}

Compilation message (stderr)

Main.cpp: In function 'void solve()':
Main.cpp:65:22: 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]
   65 |     for(int i = 0; i < s.size(); i++) {
      |                    ~~^~~~~~~~~~
Main.cpp:79:22: 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]
   79 |     for(int i = 0; i < s.size(); i++) {
      |                    ~~^~~~~~~~~~
#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...