# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
660064 | 600Mihnea | Cubeword (CEOI19_cubeword) | C++17 | 102 ms | 8712 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
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 = 5;
vector<string> words[MAX_WORD_LENGTH + 1];
int cnt_words[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 corner1 = 0; corner1 < ALPHABET_SIZE; corner1++) {
for (size_t corner2 = 0; corner2 < ALPHABET_SIZE; corner2++) {
for (size_t corner3 = 0; corner3 < ALPHABET_SIZE; corner3++) {
for (size_t corner4 = 0; corner4 < ALPHABET_SIZE; corner4++) {
for (size_t corner5 = 0; corner5 < ALPHABET_SIZE; corner5++) {
for (size_t corner6 = 0; corner6 < ALPHABET_SIZE; corner6++) {
for (size_t corner7 = 0; corner7 < ALPHABET_SIZE; corner7++) {
for (size_t corner8 = 0; corner8 < ALPHABET_SIZE; corner8++) {
solution = (solution + 1LL * cnt_words[corner1][corner2] % MODULO * cnt_words[corner2][corner3] % MODULO * cnt_words[corner3][corner4] % MODULO * cnt_words[corner4][corner1] % MODULO
* cnt_words[corner5][corner6] % MODULO * cnt_words[corner6][corner7] % MODULO * cnt_words[corner7][corner8] % MODULO * cnt_words[corner8][corner5] % MODULO
* cnt_words[corner1][corner5] % MODULO * cnt_words[corner2][corner6] % MODULO * cnt_words[corner3][corner7] % MODULO * cnt_words[corner4][corner8]) % MODULO;
}
}
}
}
}
}
}
}
if (0) {
cout << " ---> ";
for (auto &word : words[word_length]) {
cout << word << " ";
}
cout << "\n";
}
}
cout << solution << "\n";
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |