SCHOOL OJ 11159
分析此题,看一下数据,4亿的数值,循环暴力解的话肯定会超时。而对于这种类似数位统计的题目,应该要逐位分析看看,看能不能找到什么规律。
突破口知识点:m个连续的数分别%m之后必然是得到0~m-1的数;
而m个连续的数各加上一个相同的数X后得到的数依旧是连续的m个数,再%m得到的依旧是0~m-1的数。
就如此题。一个区间[a,b],而每次都有%10,那么就先以10个数为单位看一下是否有规律。
首先取a = 0, b = 9;
得到F = (0*2)%10 + 1%10 + (2*2)%10 + 3%10 + (4*2)%10.......看每个被取余的数的个位,其实就是连续的。
那么,个位数的0~9就已经确定了
其实就可以看成是0~9连续的分别%10。———————————————————— *
可算得F = 0 + 1 + 2 + 3 + 4 …… + 9= 45;
那么当取a = 10, b = 19;
则有F = (1+0*2)%10 + (1+1)%10 + (2*2+1)%10 + (1+3)%10 + (1+4*2)%10.......
那么由 * 可得,只是每个数分别加上了一个1,可见依旧是连续的10个数,所以得到的依旧是45;
那么由此可以得到,另个位数为0~9的数为一组,即十个数一组。
每当个位数遍历从0~9,就得到一个F = 45;
那么例如 输入 a = 0, b = 98;
可以得到有8个组,即8次对个位上的0~9的遍历;所以有8*45;接下来再算90~98的F即可。。。。。。。
技巧2:
间接法,题目要求的是[a,b],但直接对该区间运算并不能很好的运用上面的规律。
那么就构造一个函数用[0,b] - [0,a]即可。
分析此题,看一下数据,4亿的数值,循环暴力解的话肯定会超时。而对于这种类似数位统计的题目,应该要逐位分析看看,看能不能找到什么规律。
突破口知识点:m个连续的数分别%m之后必然是得到0~m-1的数;
而m个连续的数各加上一个相同的数X后得到的数依旧是连续的m个数,再%m得到的依旧是0~m-1的数。
就如此题。一个区间[a,b],而每次都有%10,那么就先以10个数为单位看一下是否有规律。
首先取a = 0, b = 9;
得到F = (0*2)%10 + 1%10 + (2*2)%10 + 3%10 + (4*2)%10.......看每个被取余的数的个位,其实就是连续的。
那么,个位数的0~9就已经确定了
其实就可以看成是0~9连续的分别%10。———————————————————— *
可算得F = 0 + 1 + 2 + 3 + 4 …… + 9= 45;
那么当取a = 10, b = 19;
则有F = (1+0*2)%10 + (1+1)%10 + (2*2+1)%10 + (1+3)%10 + (1+4*2)%10.......
那么由 * 可得,只是每个数分别加上了一个1,可见依旧是连续的10个数,所以得到的依旧是45;
那么由此可以得到,另个位数为0~9的数为一组,即十个数一组。
每当个位数遍历从0~9,就得到一个F = 45;
那么例如 输入 a = 0, b = 98;
可以得到有8个组,即8次对个位上的0~9的遍历;所以有8*45;接下来再算90~98的F即可。。。。。。。
技巧2:
间接法,题目要求的是[a,b],但直接对该区间运算并不能很好的运用上面的规律。
那么就构造一个函数用[0,b] - [0,a]即可。