블루 브릿지 컵 그룹 B 경기 대학교 경주 시뮬레이션 지방 (A) 오프 2,020m 마늘 중복을 찾을 수

주제 설명 :

열 한 곳입니다 { A_ {N}} A_ {0} = 1, A_ {I + 1} = (A \ 시간 {I} + A_ {I}를 개조 B A_) modC당신은 시리즈 처음으로 라벨 중복 된 항목을 프로그램는 사실을 알게 될 것입니다. 만약 만 개 이상의 출력에 대한 답  "-1"(따옴표없이)

입력 형식

세 정수 A, B, C의 첫번째 행

출력 형식

라인 출력 정수 대답.

데이터 범위

0 <A, B, C≤ 상기 데이터의 30 % 10 ^ {5} .

0 <A, B, C≤ 100 %에 대한 데이터 10 ^ {9}.

샘플 입력

2 2 9

샘플 출력

4

 보고서 문제 해결 :

1 :지도 밖으로 시간, 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;
}

 

 

게시 된 110 개 원래 기사 · 원 찬양 2 · 조회수 4986

추천

출처blog.csdn.net/jun_____/article/details/104040368