题目描述:
有一个数列 {
},,,请你编程求出这个数列第一次出现重复的项的标号。如果答案超过 2000000 输出"-1"
(不加引号)
输入格式
第一行三个整数 A,B,C。
输出格式
输出一行一个整数表示答案。
数据范围
对于 30% 的数据: 0<A,B,C≤
。对于 100% 的数据: 0<A,B,C≤
。样例输入
2 2 9
样例输出
4
解题报告:
1:用map会超时,可以用unordered_map来标记。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
unordered_map<ll, ll>node;
int main(){
ll a, b, c, pre = 1;
scanf("%lld%lld%lld", &a, &b, &c);
node[1] = 1;
for(ll i=1; i<=2000000; ++i){
ll val = (a*pre+pre%b)%c;
if(node[val]){
printf("%lld\n", i);
return 0;
}
pre = val, node[val] = 1;
}
printf("-1\n");
return 0;
}
来源:CSDN
作者:baronLJ
链接:https://blog.csdn.net/jun_____/article/details/104040368