Решение задачи Переворотное шифрование с Codeforces

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


Строка s длины n может быть зашифрована следующим алгоритмом:

переберём все делители числа n в порядке убывания (то есть от n до 1),
для каждого делителя d перевернём подстроку s[1…d] (то есть такую подстроку, которая начинается в позиции 1 и заканчивается в позиции d).
Например, если алгоритм применяется к строке s=«codeforces», то строка будет изменяться следующим образом: «codeforces» → «secrofedoс» → «orcesfedoс» → «rocesfedoс» → «rocesfedoс» (очевидно, последний переворот не изменяет строку, так как d=1).

Вам дана зашифрованная строка t. Требуется произвести расшифровку, то есть найти такую строку s, в результате шифровки которой получится строка t. Можно доказать, что такая строка s всегда существует (и при этом единственная).

Код

#include<bits/stdc++.h>
using namespace std;
int n;
string s;
signed main(){
	cin>>n>>s;
	for(int i=2;i<=n;i++)
		if(n%i==0)
			reverse(s.begin(),s.begin()+i);
	cout<<s;
}

         

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



Комментарии

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