迟到的祝福(四)
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 }