ACM_迟到的祝福(四)

迟到的祝福(四)

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

据说前几天是雁来师姐的生日,作为一个15级的小鲜肉A,没及时给师姐送去祝福真是不应该。为了补上祝福,小鲜肉决定写一封长长的英文信给雁来师姐。
但是,作为一名羞涩的只会Fibnacci数的ACMer,怕别人知道她信里写了什么,于是采取了加密措施。如,在信中的第一段是:Ibrsd jvmbkoox!
其实她想表达的是:Happy birthday!现在你不小心拿到了这封信,你想知道这封信到底写了什么。

Input:

输入包含多组数据,每组数据包含一段英文string。(|string|<=10^5) .

Output:

输出解密后的内容。

Sample Input:

Ibrsd jvmbkoox!
Nz Fhfz Lvvolw rvespb.

Sample Output:

Happy birthday!
My Dear Yanlai sister.
解题思路:详解看这里-->题目链接:ACM_出题人这样不好吧
AC代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e5+5;
 4 int main(){
 5     int fib[maxn]={1,1};
 6     for(int i=2;i<maxn;++i)
 7         fib[i]=(fib[i-1]+fib[i-2])%26;//取余26
 8     string str;
 9     while(getline(cin,str)){
10         for(size_t i=0,b=0;i<str.length();++i){
11             if(isupper(str[i]))printf("%c",(str[i]-'A'-fib[b++]+26)%26+'A');
12             else if(islower(str[i]))printf("%c",(str[i]-'a'-fib[b++]+26)%26+'a');
13             else printf("%c",str[i]);
14         }
15         cout<<endl;
16     }
17     return 0;
18 }

猜你喜欢

转载自www.cnblogs.com/acgoto/p/9240635.html