Submission #5288178


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define _MACRO(_1, _2, _3, NAME, ...) NAME
#define _repl(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define _rep(i,n) _repl(i,0,n)
#define rep(...) _MACRO(__VA_ARGS__, _repl, _rep)(__VA_ARGS__)
#define pb push_back
#define all(x) begin(x),end(x)
#define uniq(x) sort(all(x)),(x).erase(unique(all(x)),end(x))
#ifdef LOCAL
#define dbg(...) _dbg(#__VA_ARGS__, __VA_ARGS__)
void _dbg(string){cerr<<endl;}
template<class H,class... T> void _dbg(string s,H h,T... t){int l=s.find(',');cerr<<s.substr(0,l)<<" = "<<h<<", ";_dbg(s.substr(l+1),t...);}
template<class T,class U> ostream& operator<<(ostream &o, const pair<T,U> &p){o<<"("<<p.first<<","<<p.second<<")";return o;}
template<class T> ostream& operator<<(ostream &o, const vector<T> &v){o<<"[";for(T t:v){o<<t<<",";}o<<"]";return o;}
#else
#define dbg(...) {}
#endif

bool solve(){
  int n;
  string s;
  int ox,xo,o,x;
  cin>>n>>s>>ox>>xo>>o>>x;

  int xs=0, os=0;
  rep(i,n){
    if(s[i]=='o') os++;
    else xs++;
  }

  if(os != ox+xo+o || xs != ox+xo+x) return false;

  vector<int> oxs, xos;
  int both = 0;
  int oxsum = 0, xosum = 0;
  int p=0;
  while(p<n){
    int k=0;
    while(p+k+1<n && s[p+k] != s[p+k+1]) k++;
    if(k>0){
      k++;
      if(k%2==1) both += k/2;
      else if(s[p]=='o') {
        oxs.push_back(k);
        oxsum+= k/2;
      }
      else {
        xos.push_back(k);
        xosum += k/2;
      }
      p += k;
    } else p++;
  }

  auto ok = [&](){
    return max(0, ox - oxsum) + max(0, xo - xosum) <= both;
  };
dbg(oxsum, xosum);
  if(ok()) return true;
  if(ox - oxsum > 0 && xo - xosum > 0) return false;

  if(ox - oxsum > 0) {
    swap(ox, xo);
    swap(oxsum, xosum);
    swap(xos, oxs);
  }

  // ox -> xo
  sort(all(oxs));
  oxs.push_back(1);
  while(oxsum > 0){
    if(oxs.back() == 1){
      oxs.pop_back();
      if(oxs.empty()) break;
      oxs.back()--;
      oxsum--;
      continue;
    }

    oxs.back() -= 2;

    oxsum--;
    xosum++;

    dbg(oxsum, xosum, oxs);

    if(ok()) return true;
  }

  return false;
}

int main(){
  cout << (solve() ? "Yes" : "No") << endl;
  return 0;
}

Submission Info

Submission Time
Task E - ox Concatenation
User tossy
Language C++14 (GCC 5.4.1)
Score 600
Code Size 2233 Byte
Status AC
Exec Time 11 ms
Memory 772 KiB

Judge Result

Set Name all sub sample
Score / Max Score 300 / 300 300 / 300 0 / 0
Status
AC × 71
AC × 35
AC × 4
Set Name Test Cases
all sample01, sample02, sample03, sample04, sub_test01, sub_test02, sub_test03, sub_test04, sub_test05, sub_test06, sub_test07, sub_test08, sub_test09, sub_test10, sub_test11, sub_test12, sub_test13, sub_test14, sub_test15, sub_test16, sub_test17, sub_test18, sub_test19, sub_test20, sub_test21, sub_test22, sub_test23, sub_test24, sub_test25, sub_test26, sub_test27, sub_test28, sub_test29, sub_test30, sub_test31, sub_test32, sub_test33, sub_test34, sub_test35, test36, test37, test38, test39, test40, test41, test42, test43, test44, test45, test46, test47, test48, test49, test50, test51, test52, test53, test54, test55, test56, test57, test58, test59, test60, test61, test62, test63, test64, test65, test66, test67
sub sub_test01, sub_test02, sub_test03, sub_test04, sub_test05, sub_test06, sub_test07, sub_test08, sub_test09, sub_test10, sub_test11, sub_test12, sub_test13, sub_test14, sub_test15, sub_test16, sub_test17, sub_test18, sub_test19, sub_test20, sub_test21, sub_test22, sub_test23, sub_test24, sub_test25, sub_test26, sub_test27, sub_test28, sub_test29, sub_test30, sub_test31, sub_test32, sub_test33, sub_test34, sub_test35
sample sample01, sample02, sample03, sample04
Case Name Status Exec Time Memory
sample01 AC 1 ms 256 KiB
sample02 AC 1 ms 256 KiB
sample03 AC 1 ms 256 KiB
sample04 AC 1 ms 256 KiB
sub_test01 AC 1 ms 256 KiB
sub_test02 AC 1 ms 256 KiB
sub_test03 AC 1 ms 256 KiB
sub_test04 AC 1 ms 256 KiB
sub_test05 AC 1 ms 256 KiB
sub_test06 AC 1 ms 256 KiB
sub_test07 AC 1 ms 256 KiB
sub_test08 AC 1 ms 256 KiB
sub_test09 AC 1 ms 256 KiB
sub_test10 AC 1 ms 256 KiB
sub_test11 AC 1 ms 256 KiB
sub_test12 AC 1 ms 256 KiB
sub_test13 AC 1 ms 256 KiB
sub_test14 AC 1 ms 256 KiB
sub_test15 AC 1 ms 256 KiB
sub_test16 AC 1 ms 256 KiB
sub_test17 AC 1 ms 256 KiB
sub_test18 AC 1 ms 256 KiB
sub_test19 AC 1 ms 256 KiB
sub_test20 AC 1 ms 256 KiB
sub_test21 AC 1 ms 256 KiB
sub_test22 AC 1 ms 256 KiB
sub_test23 AC 1 ms 256 KiB
sub_test24 AC 1 ms 256 KiB
sub_test25 AC 1 ms 256 KiB
sub_test26 AC 1 ms 256 KiB
sub_test27 AC 1 ms 256 KiB
sub_test28 AC 1 ms 256 KiB
sub_test29 AC 1 ms 256 KiB
sub_test30 AC 1 ms 256 KiB
sub_test31 AC 1 ms 256 KiB
sub_test32 AC 1 ms 256 KiB
sub_test33 AC 1 ms 256 KiB
sub_test34 AC 1 ms 256 KiB
sub_test35 AC 1 ms 256 KiB
test36 AC 6 ms 640 KiB
test37 AC 8 ms 640 KiB
test38 AC 5 ms 512 KiB
test39 AC 3 ms 384 KiB
test40 AC 8 ms 640 KiB
test41 AC 5 ms 512 KiB
test42 AC 3 ms 384 KiB
test43 AC 4 ms 384 KiB
test44 AC 7 ms 640 KiB
test45 AC 5 ms 512 KiB
test46 AC 8 ms 640 KiB
test47 AC 8 ms 640 KiB
test48 AC 8 ms 640 KiB
test49 AC 8 ms 640 KiB
test50 AC 8 ms 640 KiB
test51 AC 8 ms 640 KiB
test52 AC 8 ms 640 KiB
test53 AC 10 ms 772 KiB
test54 AC 10 ms 772 KiB
test55 AC 8 ms 640 KiB
test56 AC 8 ms 640 KiB
test57 AC 8 ms 640 KiB
test58 AC 8 ms 640 KiB
test59 AC 8 ms 640 KiB
test60 AC 8 ms 640 KiB
test61 AC 8 ms 640 KiB
test62 AC 8 ms 640 KiB
test63 AC 11 ms 772 KiB
test64 AC 10 ms 772 KiB
test65 AC 8 ms 640 KiB
test66 AC 8 ms 640 KiB
test67 AC 8 ms 640 KiB