Я пытаюсь решить проблему Scrambled Words в Google Kickstart 2018, Round A.
У меня проблемы с генерацией входной строки. Вот указания, которые они дали
Третья строка содержит две строчные английские буквы S 1 и S 2 и пять целых чисел N, A, B,C и D. S 1 и S 2 - первые два символа строки профессора S, N - длина S, а остальные четыре целых числа - это параметры, которые вы должны использоватьчтобы сгенерировать символы S следующим образом:
Сначала мы определяем ord (c) как десятичное значение символа c и char (n) как значение символа десятичного n. Например, ord ('a') = 97 и char (97) = 'a'. Вы можете обратиться к таблице ASCII для других преобразований.
Теперь определите x 1 = ord (S 1 ), x 2 = ord(S * 2 * тысяча двадцать шесть ). Затем используйте повторение ниже, чтобы сгенерировать x i для i = 3 до N:
- x i = (A * x i-1 + B * x i-2 + C) по модулю D.
Определяем S i = char (97 + (x *)1044 * i по модулю 26)), для всех i = 3 до N.
Используя эти указания для тестового ввода,
1
5
axpaj apxaj dnrbt pjxdn abd
a a 50 1 1 1 30
Строка, которой я являюсьгенерируется
aapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaa
Но строка, которая должна быть сгенерирована, является
aapxjdnrbtvldptfzbbdbbzxtndrvjblnzjfpvhdhhpxjdnrbt
Вот мой код
char S1, S2;
long N, A, B, C, D;
cin >> S1 >> S2 >> N >> A >> B >> C >> D;
A %= D;
B %= D;
C %= D;
vector<char> S;
S.push_back(S1);
S.push_back(S2);
for (int i = 2; i < N; i++) {
long xi1 = (long)S[i - 1];
long xi2 = (long)S[i - 2];
long xi = (A * xi1) % D;
xi += ((B * xi2) % D);
xi += C;
xi %= D;
xi %= 26;
char Si = (char)(97 + xi);
S.push_back(Si);
}