만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

라피키의 시험

시간 제한2초메모리 제한1024 MB

요약
대화형 방식으로 임의의 문자열 해시를 질의하여 다항식 해시의 밑 x와 모듈러스 p를 구합니다.
난이도

어려움10점 중 8점

유형
문자열, 수학, 정수론, 구현
정답자
아직 제출이 없습니다

문제

내가 헷갈린 게 아니라 네가 헷갈린 거다.

라피키

이것은 인터랙티브 문제이다.

새끼 사자는 모두 일련의 시험을 통과해야 사자왕이 될 수 있다. 심바의 스승 라피키는 문제를 분명하게 말하지 않기로 유명하므로, 직접 유도 질문을 던져야 한다. 목표는 다항식 해시의 base와 modulus를 알아내는 것이다.

라피키는 심바에게 초기 데이터를 전혀 주지 않는다. 대신 심바가 고른 문자열의 해시값을 여러 번 알려 줄 용의가 있다.

라피키의 해시는 다음 식으로 계산한다. (s0⋅x0+s1⋅x1+s2⋅x2+⋯+sn⋅xn) mod p(s_0 \cdot x^0 + s_1 \cdot x^1 + s_2 \cdot x^2 + \dots + s_n \cdot x^n) \bmod p. 여기서 sis_i는 문자열의 ii번째 문자가 영어 알파벳에서 몇 번째인지를 나타내는 수이며, 문자는 0번부터 번호를 매긴다. xx와 pp는 자연수이고, 각각 해시의 base와 modulus라고 부른다.  mod \bmod는 나눗셈의 나머지이다.

힌트

프로그램이 올바르게 동작하려면 데이터를 출력할 때마다 다음 작업을 해야 한다.

  • Pascal: flush(output);
  • C/C++: fflush(stdout);
  • Java: System.out.flush();
  • Python: sys.stdout.flush();

또한 출력한 줄마다 줄바꿈 문자를 붙여야 한다.

예제1

  1. 예제 1

    입력
    start
    392578150
    803444726
    954305
    3052183
    123325769
    410304507
    734740968
    137477
    
    예상 출력
    helloworld
    ihuckyou
    aaaaa
    panic
    stupid
    ahahahahahahahahahahahahaha
    qwerty
    wasd
    answer: 31 1000000007