计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛(一)寻找重复项
题目描述: 有一个数列 { }, , ,请你编程求出这个数列第一次出现重复的项的标号。如果答案超过 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