计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛(一)寻找重复项

老子叫甜甜 提交于 2020-01-24 03:05:43

题目描述:

有一个数列 {

​},​

,请你编程求出这个数列第一次出现重复的项的标号。如果答案超过 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;
}

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!