Submission #766591

#TimeUsernameProblemLanguageResultExecution timeMemory
766591Pichon5Homework (CEOI22_homework)C++17
100 / 100
309 ms135772 KiB
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <string>
#include <sstream>
#include <fstream>
#include <cmath>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <bitset>
#include <bits/stdc++.h>
#define lcm(a,b) (a/__gcd(a,b))*b
#define pb push_back
#define F first
#define S second
#define vi vector<int>
#define ll long long
#define int long long
#define fore for(int i = 0; i < n; i++)
using namespace std;
const int tam=2000005;
vi G[tam];
int color[tam];

int fmin(int nodo){
    if(G[nodo].size()==0)return 1;
    if(color[nodo]){
        int sum=0;
        for(auto it : G[nodo]){
            sum+=fmin(it);
        }
        return sum;
    }else{
        int mi=1e9;
        for(auto it : G[nodo]){
            mi=min(fmin(it),mi);
        }
        return mi;
    }
}

int fmax(int nodo){
    if(G[nodo].size()==0)return 1;
    if(color[nodo]==0){
        // cout<<"coloreado"<<endl;
        int sum=0;
        for(auto it : G[nodo]){
            sum+=fmax(it);
        }
        return sum;
    }else{
        int mi=1e9;
        for(auto it : G[nodo]){
            mi=min(fmax(it),mi);
        }
        return mi;
    }
}
signed main()
{
    string s;
    cin >> s;
    int n = s.size();
    stack<int>nodos;
    int nodo=1;
    int leaves=0;
    for(int i=0;i<n;i++){
        if(s[i]=='x'){
            nodos.push(nodo);
            color[nodo]=1;
            nodo++;
            continue;
        }
        if(s[i]=='n'){
            nodos.push(nodo);
            nodo++;
            continue;
        }
        if(s[i]=='?'){
            leaves++;
            int padre=nodos.top();
            G[padre].pb(nodo);
            nodo++;
        }
        if(s[i]==')'){
            int quito=nodos.top();
            nodos.pop();
            if(nodos.empty())continue;
            int padre=nodos.top();
            G[padre].pb(quito);
        }
    }
    //wanna print the graph
    for(int i=1;i<=n;i++){
        //cout<<i<<" : ";
        for(auto it : G[i]){
            // cout<<i<<" "<<it<<endl;
        }
    }
        // cout<<endl;
    int mi=fmin(1);
    // cout<<"mi  "<<mi<<endl;
    // for(int i=1;i<=n;i++){
    //     cout<<i<<" "<<color[i]<<endl;
    //     color[i]=!color[i];
    // }
    int ma=fmax(1);
    ma=leaves-ma+1;
    cout<<ma-mi+1<<endl;
    
    return 0;
}  

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:100:18: warning: unused variable 'it' [-Wunused-variable]
  100 |         for(auto it : G[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...