Submission #1163225

#TimeUsernameProblemLanguageResultExecution timeMemory
1163225AlebnKvalitetni (COCI16_kvalitetni)C++20
0 / 120
1096 ms5584 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <queue>
#include <numeric>
#include <cmath>
#include <iomanip>
#define int long long
#define ff first
#define ss second
using namespace std;

int opt(vector<int>& a, int x) {
    priority_queue<int> pq;
    int temp;
    for(auto i : a) pq.push(i);
    while(x--) {
        temp = pq.top();
        pq.pop();
        pq.push(temp - 1);
    }
    int res = 1;
    while(pq.size()) {
        res *= pq.top();
        pq.pop();
    }
    return res;
}
void dfs(vector<pair<bool,vector<int>>>& graph, string& s, int i, int l, int r) {
    int last = l, cnt = 0;
    for(int j = l; j <= r; j++) {
        if(s[j] == '(') cnt++;
        else if(s[j] == ')') {
            cnt--;
            if(!cnt) {
                if(j != r) {
                    if(s[j + 1] == '*') graph[i].ff = true;
                }
                graph[i].ss.push_back(graph.size());
                graph.push_back({false,{}});
                dfs(graph, s, graph.size() - 1, last + 1, j - 1);
                last = j + 2;
            }
        }
    }
}
double dfss(vector<pair<bool,vector<int>>>& graph, vector<int>& a, int i) {
    if(!graph[i].ss.size()) return a[0];
    double res = (graph[i].ff ? 1 : 0), suum = 0, temp;
    vector<int> kak;
    for(auto j : graph[i].ss) {
        temp = dfss(graph, a, j);
        kak.push_back(temp);
        if(graph[i].ff) res *= temp;
        else res += temp;
        suum += temp;
    }
    if(suum > a[graph[i].ss.size()-1]) {
        if(graph[i].ff) {
            return opt(kak, suum - a[graph[i].ss.size()-1]);
        } else return a[graph[i].ss.size()-1];
    }
    return res;
}

void solve() {
    int n;
    cin >> n;
    vector<int> a(n);
    for(int i = 0; i < n; i++) cin >> a[i];
    string s;
    cin >> s;
    vector<pair<bool,vector<int>>> graph(1, {false, {}});
    dfs(graph, s, 0, 1, s.size() - 2);
    cout << fixed << setprecision(5) << dfss(graph, a, 0) << "\n";
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    solve();
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...