Submission #971595

#TimeUsernameProblemLanguageResultExecution timeMemory
971595nguyentunglamHomework (CEOI22_homework)C++17
100 / 100
89 ms114896 KiB
#include<bits/stdc++.h> #define all(v) v.begin(), v.end() #define endl "\n" using namespace std; const int N = 2e6 + 10; pair<int, int> st[N]; int t[N]; int operation[N]; int child[2][N], sz[N]; int l[N], r[N]; int32_t main() { #define task "" cin.tie(0) -> sync_with_stdio(0); if (fopen("task.inp", "r")) { freopen("task.inp", "r", stdin); freopen("task.out", "w", stdout); } if (fopen(task".inp", "r")) { freopen (task".inp", "r", stdin); freopen (task".out", "w", stdout); } string str; cin >> str; int p = 0; int id = 0, _id = 0; for(char c : str) if (c == '?') _id++; int n = _id; for(int i = 0; i < str.size(); i++) { if (str[i] == 'm') { i += 3; st[++p] = make_pair(0, 0); t[p] = str[i - 1] == 'x'; // cout << str[i - 1] << " " << t[p] << endl; } else if (str[i] == '?') { ++id; if (st[p].first == 0) st[p].first = id; else st[p].second = id; } else if (str[i] == ')') { ++_id; assert(st[p].first && st[p].second); child[0][_id] = st[p].first; child[1][_id] = st[p].second; operation[_id] = t[p]; // cout << _id << " " << st[p].first << " " << st[p].second << " " << operation[_id] << endl; --p; if (st[p].first == 0) st[p].first = _id; else st[p].second = _id; } } auto dfs = [&] (auto self, int u) { if (u <= n) { l[u] = r[u] = sz[u] = 1; return; } int x0 = child[0][u], x1 = child[1][u]; self(self, x1); self(self, x0); sz[u] = sz[x0] + sz[x1]; if (operation[u]) { r[u] = max(sz[x0] + r[x1], sz[x1] + r[x0]); l[u] = l[x0] + l[x1]; } else { l[u] = min(l[x0], l[x1]); r[u] = r[x0] + r[x1] - 1; } assert(l[u] <= r[u]); }; dfs(dfs, _id); cout << r[_id] - l[_id] + 1; }

Compilation message (stderr)

Main.cpp: In function 'int32_t main()':
Main.cpp:43:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |   for(int i = 0; i < str.size(); i++) {
      |                  ~~^~~~~~~~~~~~
Main.cpp:24:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   24 |     freopen("task.inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:25:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |     freopen("task.out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:29:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   29 |     freopen (task".inp", "r", stdin);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:30:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   30 |     freopen (task".out", "w", stdout);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...