Submission #660101

# Submission time Handle Problem Language Result Execution time Memory
660101 2022-11-20T11:04:38 Z 600Mihnea Cubeword (CEOI19_cubeword) C++17
0 / 100
64 ms 7904 KB
bool home = 0;
#include <bits/stdc++.h>

using namespace std;

const int MODULO = 998244353;

int get_char_id(char ch) {
  assert(('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || ('0' <= ch && ch <= '9'));
  if ('a' <= ch && ch <= 'z') {
    return ch - 'a';
  }
  if ('A' <= ch && ch <= 'Z') {
    return 1 + get_char_id('z') + ch - 'A';
  }
  return 1 + get_char_id('Z') + ch - '0';
}

const int MAX_WORD_LENGTH = 10;
///const int ALPHABET_SIZE = 2 * 26 + 10;
const int ALPHABET_SIZE = 16;
vector<string> words[MAX_WORD_LENGTH + 1];
int cnt_words[ALPHABET_SIZE][ALPHABET_SIZE];
int cnt3[ALPHABET_SIZE][ALPHABET_SIZE][ALPHABET_SIZE];

int main() {
  if (home == 0) {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  } else {
    freopen ("input.txt", "r", stdin);
  }

  {
    size_t num_samples;
    cin >> num_samples;
    for (size_t sample_index = 0; sample_index < num_samples; sample_index++) {
      string word;
      cin >> word;
      words[word.size()].push_back(word);
    }
  }
  int solution = 0;
  for (size_t word_length = 1; word_length <= MAX_WORD_LENGTH; word_length++) {
    if (words[word_length].empty()) {
      continue;
    }
    size_t word_count = words[word_length].size();
    for (size_t word_index = 0; word_index < word_count; word_index++) {
      string reverse_word = words[word_length][word_index];
      reverse(reverse_word.begin(), reverse_word.end());
      words[word_length].push_back(reverse_word);
    }
    sort(words[word_length].begin(), words[word_length].end());
    words[word_length].resize(unique(words[word_length].begin(), words[word_length].end()) - words[word_length].begin());
    word_count = words[word_length].size();
    for (size_t first_letter = 0; first_letter < ALPHABET_SIZE; first_letter++) {
      for (size_t last_letter = 0; last_letter < ALPHABET_SIZE; last_letter++) {
        cnt_words[first_letter][last_letter] = 0;
      }
    }
    for (size_t word_index = 0; word_index < word_count; word_index++) {
      cnt_words[get_char_id(words[word_length][word_index][0])][get_char_id(words[word_length][word_index].back())]++;
    }
    for (size_t a = 0; a < ALPHABET_SIZE; a++) {
      for (size_t b = a; b < ALPHABET_SIZE; b++) {
        for (size_t c = b; c < ALPHABET_SIZE; c++) {
          cnt3[a][b][c] = 0;
          for (size_t d = 0; d < ALPHABET_SIZE; d++) {
            cnt3[a][b][c] = (cnt3[a][b][c] + 1LL * cnt_words[d][a] * cnt_words[d][b] * cnt_words[d][c]) % MODULO;
          }
          cnt3[a][c][b] = cnt3[b][a][c] = cnt3[b][c][a] = cnt3[c][a][b] = cnt3[c][b][a] = cnt3[a][b][c];
        }
      }
    }
    for (size_t a = 0; a < ALPHABET_SIZE; a++) {
      for (size_t b = a + 1; b < ALPHABET_SIZE; b++) {
        for (size_t c = b + 1; c < ALPHABET_SIZE; c++) {
          for (size_t d = c + 1; d < ALPHABET_SIZE; d++) {
            if (a != b && a != c && a != d && b != c && b != d && c != d) {
              int x1 = cnt3[a][b][c];
              int x2 = cnt3[a][d][b];
              int x3 = cnt3[a][c][d];
              int x4 = cnt3[b][c][d];
              solution = (solution + 1LL * x1 * x2 % MODULO * x3 % MODULO * x4) % MODULO;
            }
          }
        }
      }
    }
    for (size_t a = 0; a < ALPHABET_SIZE; a++) {
      for (size_t b = 0; b < ALPHABET_SIZE; b++) {
        for (size_t c = 0; c < ALPHABET_SIZE; c++) {
          for (size_t d = 0; d < ALPHABET_SIZE; d++) {
            if (a == b || a == c || a == d || b == c || b == d || c == d) {
              int x1 = cnt3[a][b][c];
              int x2 = cnt3[a][d][b];
              int x3 = cnt3[a][c][d];
              int x4 = cnt3[b][c][d];
              solution = (solution + 1LL * x1 * x2 % MODULO * x3 % MODULO * x4) % MODULO;
            }
          }
        }
      }
    }
  }
  cout << solution << "\n";

  return 0;
}

Compilation message

cubeword.cpp: In function 'int main()':
cubeword.cpp:30:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   30 |     freopen ("input.txt", "r", stdin);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 64 ms 7904 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 64 ms 7904 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 64 ms 7904 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 64 ms 7904 KB Output isn't correct
2 Halted 0 ms 0 KB -