56102023-08-08 11:42:13TomaSajtDiana and Numberscpp17Hibás válasz 0/10027ms13940 KiB
#include <bits/stdc++.h>
using namespace std;

int length_without(const string& s, int i, int j) {
  int result = 0;
  bool was_not_null = false;
  for (int k = 0; k < s.size(); k++) {
    if (k != i && k != j) {
      was_not_null |= s[k] != '0';
      result += was_not_null;
    }
  }
  return result;
}

void write_without(const string& s, int i, int j) {
  bool was_not_null = false;
  for (int k = 0; k < s.size(); k++) {
    if (k != i && k != j) {
      was_not_null |= s[k] != '0';
      if (was_not_null) {
        cout << s[k];
      }
    }
  }
  cout << (was_not_null ? "\n" : "-1\n");
}

void task() {
  string s;
  cin >> s;
  int sum = 0;
  for (auto e : s) {
    sum += e - '0';
  }
  if (sum % 3 == 0) {
    cout << s << '\n';
    return;
  }
  for (int i = 0; i < s.size(); i++) {  // one digit - best
    if ((s[i] - '0') % 3 == sum % 3 && (i + 1 == s.size() || s[i] < s[i + 1])) {
      write_without(s, i, i);
      return;
    }
  }
  array<int, 3> best = {-1, 0, 0};           // length, without
  for (int i = s.size() - 1; i >= 0; i--) {  // one digit - last
    if ((s[i] - '0') % 3 == sum % 3) {
      best = {length_without(s, i, i), i, i};
      break;
    }
  }
  for (int i = 0; i + 1 < s.size(); i++) {  // two digits - best
    if ((s[i] - '0') % 3 && s[i] < s[i + 1]) {
      for (int j = i + 1; j < s.size(); j++) {
        if ((s[j] - '0') % 3 && (j + 1 == s.size() || s[j] < s[j + 1])) {
          best = max(best, {length_without(s, i, j), i, j});
          return;
        }
      }
      for (int j = s.size() - 1; j > i; j--) {
        if ((s[j] - '0') % 3) {
          best = max(best, {length_without(s, i, j), i, j});
          return;
        }
      }
    }
  }
  for (int i = s.size() - 1; i >= 1; i--) {  // two digits - last
    if ((s[i] - '0') % 3) {
      for (int j = i - 1; j >= 0; j--) {
        if ((s[j] - '0') % 3) {
          best = max(best, {length_without(s, i, j), i, j});
          break;
        }
      }
      break;
    }
  }
  write_without(s, best[1], best[2]);
}

int main() {
  cin.sync_with_stdio(0);
  cin.tie(0);

  int n;
  cin >> n;
  while (n--) task();
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
subtask20/9
2Hibás válasz3ms1880 KiB
3Hibás válasz2ms1964 KiB
subtask30/12
4Hibás válasz3ms2232 KiB
5Hibás válasz3ms2220 KiB
6Hibás válasz3ms2556 KiB
7Hibás válasz3ms2788 KiB
8Hibás válasz3ms2832 KiB
9Hibás válasz3ms3048 KiB
subtask40/27
10Hibás válasz19ms4736 KiB
subtask50/52
11Hibás válasz8ms4592 KiB
12Hibás válasz26ms5896 KiB
13Elfogadva25ms7416 KiB
14Hibás válasz25ms8596 KiB
15Hibás válasz17ms9048 KiB
16Hibás válasz27ms10752 KiB
17Elfogadva17ms11632 KiB
18Hibás válasz17ms11956 KiB
19Elfogadva17ms12908 KiB
20Elfogadva25ms13940 KiB
21Hibás válasz3ms13736 KiB
22Hibás válasz3ms13616 KiB
23Hibás válasz3ms13616 KiB
24Hibás válasz3ms13620 KiB
25Hibás válasz3ms13620 KiB
26Hibás válasz2ms13624 KiB