……提交30次……
手残把之前写的页面关了……万分悲痛的心路历程就略了吧……
题目大意:
1.多组测试数据,依次输入A,B,n(1 <= A, B <= 1000, 1 <= n <= 100,000,000),输入0 0 0 终止;
2.f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7;
3.输出 f(n)。
解题思路:
1.n的数值很大,这类数值很大的问题一般都有规律,找出循环节(周期)是关键;
2.找规律,这道题是从 f(1) = 1 和 f(2) = 1 开始,然后依次模7,可知 f(n) 只有7种情况,所以两数相邻只有7*7=49种;
3.所以从 f(1) 到 f(49) 必会出现相邻两个 f(m-1) = 1 , f(m) = 1,所以 f(n) 为周期函数,49为其一个周期;(按照其之前的描述,应该是周期不超过49,至于为什么周期是49,我也不清楚)
//该思路对应下面others1
总结:
看到这种一亿的数据就不要用暴力这种复杂度感人的算法了
……取模……一定想想可能会有循环节的可能性!
代码:
others1//n%49
others2
mine1
mine2
mine3
others2是已知循环节小于49,求循环周期再去余
与上面代码稍有不同的是,我的代码循环至找到循环节就停止(我以为会比较节约时间,结果各种问题)
开始暴力所以一直tle……接着看题解改思路re……
这里的re有必要说一下,它并不是因为tle(cin&scanf、ifelse嵌套)造成,时间并没有卡到如此感人的程度……也不是因为循环到n,因为不可能出现数组越界的状况
最大的可能是照另一个博主写到的那样:当写n=n%m成这种语句就是re的,改成 m=n%(i-2);就对了
……至于为什么我也不知道……
把变量一改之后再提交就是wa……找ac过的程序对拍还是找不到错误……我就奇了怪了……
恩,就酱吧……我的三个程序不是re就是wa就是tle……不管了(╯‵□′)╯︵┻━┻
小节:
1.数据类型范围
2.TLE & RE(runtime error)
3.RE可能情况
————————————————————————
1.数据类型范围
unsigned int 0~4294967295
int 2147483648~2147483647
unsigned long 0~4294967295
long 2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:18446744073709551615
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
//从kuangbin大神blog搜到的……
2.TLE & RE(runtime error)
一直以为这货是一个意思的孩纸伤不起……
http://poj.org/page?id=1000
runtime是运行时刻,简单说呢,就是一个程序正在运行的时期。如果程序在运行过程中出现错误异常终止,计算机会返回一个含有错误信息的"Runtime Error"。平时很容易见到。
至于TLE,就是字面意思超时了
3.RE可能情况
runtime error (运行时错误)就是程序运行到一半,程序就崩溃了。
比如说:
①除以零
②数组越界:int a[3]; a[10000000]=10;
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000];
如果你用的是 Windows XP 操作系统,那么Runtime Error 的界面一般如下: