Submission #57717

#TimeUsernameProblemLanguageResultExecution timeMemory
57717ksun48Security Gate (JOI18_security_gate)C++14
12 / 100
5003 ms764 KiB
#include <bits/stdc++.h> using namespace std; typedef long long LL; const LL MOD = 1000000007; const int MAXN = 110; LL check(string s){ vector<int> psums(1,0); for(int j = 0; j < s.size(); j++){ if(s[j] == '('){ psums.push_back(psums[psums.size() - 1] + 1); } else { psums.push_back(psums[psums.size() - 1] - 1); } } int laste = psums.size() - 1; while(laste > 0 && psums[laste-1] >= psums[psums.size()-1]){ laste--; } vector<int> endlists[2 * MAXN]; vector<int> psumlists[2 * MAXN]; for(int j = laste; j <= psums.size() - 1; j++){ endlists[MAXN + psums[j]].push_back(j); } for(int j = 0; j <= psums.size() - 1; j++){ psumlists[MAXN + psums[j]].push_back(j); } int a = psums[psums.size() - 1] / 2; for(int j = 0; j < psums.size(); j++){ if(psums[j] < 0) break; int need = psums[j] + a; vector<int>& z = endlists[MAXN + need]; int idx = lower_bound(z.begin(), z.end(), j) - z.begin(); if(idx >= z.size()) continue; int e = z[idx]; // check if all elements in [j,e] are <= vector<int>& w = psumlists[MAXN + 2 * psums[j] + 1]; int idx2 = lower_bound(w.begin(), w.end(), j) - w.begin(); if(idx2 < w.size() && w[idx2] <= e){ continue; } return 1; } return 0; } LL cnt(string s, int idx){ if(idx == s.size()) return check(s); if(s[idx] != 'x'){ return cnt(s, idx + 1); } string s1 = s; string s2 = s; s1[idx] = '('; s2[idx] = ')'; return (cnt(s1, idx + 1) + cnt(s2, idx + 1)) % MOD; } int main(){ int n; string s; cin >> n >> s; if(n % 2 == 1){ cout << 0 << '\n'; return 0; } cout << cnt(s, 0) << '\n'; }

Compilation message (stderr)

securitygate.cpp: In function 'LL check(std::__cxx11::string)':
securitygate.cpp:9:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 0; j < s.size(); j++){
                 ~~^~~~~~~~~~
securitygate.cpp:22:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = laste; j <= psums.size() - 1; j++){
                     ~~^~~~~~~~~~~~~~~~~~~
securitygate.cpp:25:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 0; j <= psums.size() - 1; j++){
                 ~~^~~~~~~~~~~~~~~~~~~
securitygate.cpp:29:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 0; j < psums.size(); j++){
                 ~~^~~~~~~~~~~~~~
securitygate.cpp:34:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(idx >= z.size()) continue;
      ~~~~^~~~~~~~~~~
securitygate.cpp:39:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(idx2 < w.size() && w[idx2] <= e){
      ~~~~~^~~~~~~~~~
securitygate.cpp: In function 'LL cnt(std::__cxx11::string, int)':
securitygate.cpp:48:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(idx == s.size()) return check(s);
     ~~~~^~~~~~~~~~~
#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...