解密

【题目描述】

上一次,小猴的加密方式很快就被破解掉了,后来他学习了一个很经典的加密方式——“凯撒密码”,可是他觉得这个也很容易就会被别人破解,所以他决定创造一种”猴氏撒密码”。

和”凯撒密码”一样,”猴氏撒密码撒密码”也是利用字母向后偏移来实现的,但是他觉得偏移值如果固定的话也很容易被人破解,所以在加密后还会把这个字母再加上偏移值个数,例如 “a” 在偏移值为 3 时,会被加密为 “dddd“。如果保证明文中相邻字母加密后的字母不会相同,现在给出你一个加密后的结果,你能把明文找出来

【输入格式】

第一行一个仅由小写字母组成的的字符串 ss,表示加密后的结果。

【输出格式】

一个字符串表示加密前的明文。

【输入输出样例#1】

输入#1

aaadddd

复制

输出#1

ya

复制

【输入输出样例#2】

输入#2

hhrrrrppd

复制

输出#2

good

复制

【输入输出样例#3】

输入#3

lucky

复制

输出#3

lucky

复制

【说明提示】

样例 11 解释:

aaa” 连续的 3 个 a 表示偏移值是 2,所以对应的明文就是 y

dddd” 连续的 44 个 d 表示偏移值是 3,所以对应的明文就是 a

因此 “aaadddd” 对应的明文是 “ya“。

【数据范围】

对于 100% 的数据: 1字符串s的长度1000000

【代码样例】

#include <bits/stdc++.h>
using namespace std;
string s;
char a;
int cnt;
int main(){
    cin>>s;
    a=s[0];
    cnt=0;
    for(int i=1;i<=s.size();i++){
        if(a==s[i]){
            cnt++;
        }
        else{
            if((a-cnt)<'a') {
                cout << char((a-cnt-'a'+1)%26+'z');
            } else {
                cout<<char(a-cnt);
            }
            a=s[i];
            cnt=0;
        }
    }
}