5610 2023. 08. 08 11:42:13 TomaSajt Diana and Numbers cpp17 Hibás válasz 0/100 27ms 13940 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1828 KiB
subtask2 0/9
2 Hibás válasz 3ms 1880 KiB
3 Hibás válasz 2ms 1964 KiB
subtask3 0/12
4 Hibás válasz 3ms 2232 KiB
5 Hibás válasz 3ms 2220 KiB
6 Hibás válasz 3ms 2556 KiB
7 Hibás válasz 3ms 2788 KiB
8 Hibás válasz 3ms 2832 KiB
9 Hibás válasz 3ms 3048 KiB
subtask4 0/27
10 Hibás válasz 19ms 4736 KiB
subtask5 0/52
11 Hibás válasz 8ms 4592 KiB
12 Hibás válasz 26ms 5896 KiB
13 Elfogadva 25ms 7416 KiB
14 Hibás válasz 25ms 8596 KiB
15 Hibás válasz 17ms 9048 KiB
16 Hibás válasz 27ms 10752 KiB
17 Elfogadva 17ms 11632 KiB
18 Hibás válasz 17ms 11956 KiB
19 Elfogadva 17ms 12908 KiB
20 Elfogadva 25ms 13940 KiB
21 Hibás válasz 3ms 13736 KiB
22 Hibás válasz 3ms 13616 KiB
23 Hibás válasz 3ms 13616 KiB
24 Hibás válasz 3ms 13620 KiB
25 Hibás válasz 3ms 13620 KiB
26 Hibás válasz 2ms 13624 KiB