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