Submission #941230

#TimeUsernameProblemLanguageResultExecution timeMemory
941230nguyentunglamToxic Gene (NOI23_toxic)C++17
9.46 / 100
4 ms904 KiB
#include<bits/stdc++.h>
#include "toxic.h"
#define fi first
#define se second
#define endl "\n"
#define ii pair<int, int>
using namespace std;

const int N = 300 + 10;
bool mark[N];
#ifdef ngu
char a[N], b[N];
int query_sample(vector<int> species) {
  bool toxic = 0;
  for(int &j : species) toxic |= a[j] == 'T';
  int ret = 0;
  for(int &j : species) {
    if (a[j] == 'S') ret++;
    else if (a[j] == 'R' && !toxic) ret++;
  }
  return ret;
}

void answer_type(int x, char c) {
  b[x] = c;
}
#endif // ngu

void determine_type (int n) {
  int toxic = 0;
  for(int i = 1; i <= n; i++) mark[i] = 0;
  for(int i = 1; i <= n; i++) if (query_sample({i}) == 0) {
    answer_type(i, 'T');
    toxic = i;
    mark[i] = 1;
  }

  for(int i = 1; i <= n;) {
    int cur = 1;
    vector<int> ask;
    ask.push_back(toxic);
    int j = i;
    while (ask.size() + cur <= 300 && j <= n) {
      for(int k = 1; k <= cur; k++) ask.push_back(j);
      cur *= 2;
      j++;
    }
    int result = query_sample(ask);
    for(int k = 0; k < j - i; k++) if (!mark[i + k]) {
      if (result >> k & 1) answer_type(i + k, 'S');
      else answer_type(i + k, 'R');
    }
    i = j;
  }
}

#ifdef ngu
int main() {

  freopen ("task.inp", "r", stdin);
  freopen ("task.out", "w", stdout);

  int n; cin >> n;

  for(int i = 1; i <= n; i++) cin >> a[i];

  determine_type(n);

  for(int i = 1; i <= n; i++) cout << b[i] << " ";
}
#endif // ngu

#Verdict Execution timeMemoryGrader output
Fetching results...