포럼
문제 USACO0442

소 유전학

설명

소들의 게놈을 시퀀싱한 뒤, 농부 존은 이제 게놈 편집에 도전하고 있다! 알다시피 게놈은 A, C, G, T로 이루어진 문자열로 나타낼 수 있다. 농부 존이 고려하는 게놈의 최대 길이는 \(10^5\)이다.

농부 존은 게놈 하나로 시작하여 다음 단계를 수행해 편집한다.

  1. 연속한 두 개의 같은 문자 사이마다 게놈을 나눈다.
  2. 나뉜 각 부분 문자열을 뒤집는다.
  3. 뒤집힌 부분 문자열들을 같은 순서로 이어 붙인다.

예를 들어 농부 존이 게놈 AGGCTTT로 시작했다면 다음 단계를 수행한다.

  1. 연속한 G 사이와 T 사이에서 나누어 AG | GCT | T | T를 얻는다.
  2. 각 부분 문자열을 뒤집어 GA | TCG | T | T를 얻는다.
  3. 부분 문자열들을 이어 붙여 GATCGTT를 얻는다.

안타깝게도 게놈을 편집한 후 농부 존의 컴퓨터가 고장 나서 처음 시작했던 게놈의 서열을 잃어버렸다. 게다가 편집된 게놈의 일부가 손상되어 물음표로 대체되어 있다.

편집된 게놈의 서열이 주어질 때, 원래 게놈으로 가능한 경우의 수를 \(10^9+7\)로 나눈 나머지를 구해 농부 존을 도와주자.

문제 제공: Benjamin Qi

제약

배점

  • 테스트 케이스 1-4에서는 게놈의 길이가 최대 \(10\)이다.
  • 테스트 케이스 5-11에서는 게놈의 길이가 최대 \(10^2\)이다.
  • 테스트 케이스 12-20에서는 추가 제약이 없다.

문제 제공: Benjamin Qi

입력 형식

각 문자가 A, G, C, T, ? 중 하나인, 비어 있지 않은 문자열이 주어진다.

출력 형식

가능한 원래 게놈의 개수를 \(10^9+7\)로 나눈 나머지를 출력한다.

예제 1
입력
?
출력
4
설명

The question mark can be any of A, G, C, or T.

예제 2
입력
GAT?GTT
출력
3
설명

There are two possible original genomes aside from AGGCTTT, which was described
above.

AGGATTT -> AG | GAT | T | T -> GA | TAG | T | T -> GATAGTT

TAGGTTT -> TAG | GT | T | T -> GAT | TG | T | T -> GATTGTT
문제 정보

riseoj 작성

출처 올림피아드 > USACO > 2020-2021 > December > Gold

태그

평가 및 의견

Bovine Genetics

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

Bovine Genetics

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8