出题人这样不好吧
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
作为编协的第一次月赛,肯定是要有防AK(ALL KILL)的题目的,只会Fibnacci数的出题人绞尽脑汁,没能想出一道难题,没办法只好在题面上做一些手脚(加密)。
其中有一道题题面是这样的:hjxhs ia dvwpude z,he sn f snrzad deppahe, tbcm wytj ir sm zvdpzdxiq uus tjc ta n dijphqer rclu taw yl p.
比赛时,XX神对题面研究了两个多小时,终于找到一点点规律,破解出了前4个单词hjxhs ia dvwpude z,是given an integer n。但是比赛的时间已经不多了,XX神需要你的帮助。请帮他解密题面,并帮他ac了这个题。
Sample Output:
1
解题思路:找规律。对比一下原题前4个单词和解密的4个单词的ASCII值,可以得出关于斐波那契数列的对应关系,简单模拟一下即可得出规律。先算出:hjxhs ia dvwpude z和given an integer n的两个字符串中各字母ascil值减'a'后,进行对比可得:
7 9 23 7 18 8 0 3 21 22 15 20 3 4 25
6 8 21 4 13 0 13 8 13 19 4 6 4 17 13
1 1 2 3 5 8 13 21(3-21+26==8)....
突破口是题干中“只会Fibnacci数的出题人”,刚好上面两行数字对应着减下来是:1 1 2 3 5 8 13…(计算斐波那契数列时要取余26)。
1 #include<bits/stdc++.h>
2 using namespace std;
3 int main(){
4 int fib[120]={1,1};
5 for(int i=2;i<120;++i)
6 fib[i]=(fib[i-1]+fib[i-2])%26;//取余26
7 string str="hjxhs ia dvwpude z,he sn f snrzad deppahe, tbcm wytj ir sm zvdpzdxiq uus tjc ta n dijphqer rclu taw yl p.";
8 for(size_t i=0,b=0;i<str.length()-1;++i){
9 if(str[i]!=' '&&str[i]!=',')
10 printf("%c",(str[i]-'a'-fib[b++]+26)%26+'a');
11 else printf("%c",str[i]);
12 }
13 return 0;
14 }
因此,程序输出为:given an integer n,it is a simple problem, your task is to calculate the sum of n integers from one to n.即计算1~n所有数的总和。
AC代码:
1 #include<bits/stdc++.h>
2 using namespace std;
3 int main(){
4 long long n;//避免数据溢出
5 while(cin>>n){cout<<(1+n)*n/2<<endl;}
6 return 0;
7 }