1 条题解
-
0
自动搬运
来自洛谷,原作者为

Thomas_Cat
越学越菜。搬运于
2025-08-24 22:28:44,当前版本为作者最后更新于2021-08-20 19:25:49,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
对于这一题对于 的数据 则显然不会是暴力打解了,一定是有规律的,因此可以从这方面去考虑。
Subtask 1
显然 只需要暴力枚举即可,复杂度 ,注意在计算 的时候如果单纯按原式代入计算 的话那么在后面可能会爆 ,所以注意:
因为只计算个位数,只用算出 (也就是个位数即可),应该把式子变成:
$$a_i=(a_{i-1}\bmod 10) \times (a_{i-2}\bmod 10) \bmod 10 $$直接打暴力即可:()
#include<bits/stdc++.h> using namespace std; int main(){ int n,m,k; cin>>n>>m>>k; int a[100005]; a[1]=n,a[2]=m; for(int i=3;i<=k;i++) a[i]=(a[i-1]%10*a[i-2]%10)%10;//按照式子计算得出答案 cout<<a[k];//最后输出即可 return 0; }Subtask 2
显然不能打暴力了,对于 需要找规律,因此我们尝试枚举部分情况的结果:
下表中 均为 。
上图中就是几个数对按照题目要求得出的 数。
在图中:
我们可以发现部分和部分的数字是完全相同的,不妨猜测所有数列都以 次为循环。
根据这个思路我们用 来看看,因为 不考虑在数列以内,因此对于 在循环中的点的公式为 ,因此代入计算即可。
#include<bits/stdc++.h> using namespace std; int main(){ long long n,m,k; cin>>n>>m>>k; int a[10],b[7]; a[1]=n,a[2]=m;//a1,a2按照前面算出来,因为数列中不包含 for(int i=3;i<=9;i++)//循环 a[i]=(a[i-1]%10*a[i-2]%10)%10;//按照前面算出第一个数列也就是六次循环算出的结果 cout<<a[(k-3)%6+3];//代入公式计算算出即可 return 0; }令:如果遇到相乘 为 ,只需输出 即可;如果遇到 输出 即可。
综上,求解方法为:
$$a_i=(a_{i-1}\bmod 10) \times (a_{i-2}\bmod 10) \bmod 10 $$令:
则:
$$\Longrightarrow ans = \begin{cases}g(x)\in\{0\}&ans=0\\r(2),r(3) \in \{5\}&ans=5\\r(2),r(3) \in \{6\}&ans=6\\else&ans=a_{(k-3) \bmod 6 +3}\end{cases} $$
- 1
信息
- ID
- 5988
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者