Решение задачи Палиндромная замена с Codeforces

Без пояснения   Просмотров: 28


Задана строка s, состоящая из n строчных букв латинского алфавита. n всегда четно.

Для каждой позиции i (1≤i≤n) в строке s вам необходимо заменить букву на этой позиции либо на предыдущую в алфавитном порядке, либо на следующую (для букв 'a' и 'z' доступен только один вариант). Буква на каждой позиции должна быть изменена ровно один раз.

Например, буква 'p' должна быть изменена либо на 'o', либо на 'q', буква 'a' должна быть изменена на 'b', и буква 'z' должна быть изменена на 'y'.

Таким образом, строка «codeforces», например, может быть изменена на «dpedepqbft» ('c' → 'd', 'o' → 'p', 'd' → 'e', 'e' → 'd', 'f' → 'e', 'o' → 'p', 'r' → 'q', 'c' → 'b', 'e' → 'f', 's' → 't').

Строка s называется палиндромом, если она читается одинаково как слева направо, так и справа налево. Например, строки «abba» и «zz» — палиндромы, а строки «abca» и «zy» — нет.

Ваша задача — проверить, что можно сделать строку s палиндромом, применив выше приведенные замены к каждой позиции. Выведите «YES», если строку s можно сделать палиндромом. В противном случае выведите «NO».

Каждый тест содержит несколько строк, для каждой из них необходимо решить задачу независимо.

Код

#include<bits/stdc++.h>
using namespace std;


int t, n;
string s, ans;

int main() {
	cin >> t;
	while(t--) {
		ans = "YES\n";
		cin >> n >> s;
		n /= 2;
		for (int i = 0; i < n; i++) {
			char C = s[2 * n - 1 - i];
			if(s[i] + 2 == C || s[i] - 2 == C || s[i] == C);
			else ans = "NO\n";
		}
		cout << ans;
	}
	return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться