예전에는 후보가 유권자에게 자신의 생각과 앞으로 하려는 일을 그대로 말하기만 하면 되었다(사실 조금은 부풀렸을지도 모른다 — 좋았다던 그 시절도 실제로는 그렇게 좋지 않았으니까). 요즘은 모든 발언과 연설을 세심하게 준비하고 포커스 그룹으로 사전 검증하여, 부정적인 반응을 일으키거나 원치 않는 연상을 만들지 않도록 한다. 포커스 그룹 참가자들은 손에 레버를 쥐고 앉아 연설을 들으면서, 후보에게 얼마나 긍정적인 느낌을 받는지를 레버로 표시한다. 그 반응을 바탕으로 연설문을 다시 고친다.
실제 포커스 그룹을 동원하는 수고를 덜고, 대신 사람들이 어떤 연설에 어떻게 반응할지 알려 주는 컴퓨터 프로그램이 있다면 훨씬 편하지 않을까? 여기서는 그런 기능의 아주 초보적인 근사치를 계산하는 프로그램을 작성한다. 핵심 단어와 구절, 그리고 그것들이 불러일으키는 반응이 주어지고, 이를 바탕으로 연설의 점수를 평가해야 한다.
더 구체적으로, 각 구절에는 양수 또는 음수 점수가 매겨져 있다. 예를 들어 taxes는 -2점, increase taxes는 -4점, education은 3점, slash education은 -6점일 수 있다. 각 구절이 연설에 몇 번 등장하는지 세고, 해당 점수를 모두 더하여 연설의 총점을 구한다.
첫 번째 줄에는 데이터 집합의 개수 $K$ ($K \geq 1$)가 주어진다. 이어서 다음 형식의 데이터 집합이 $K$개 주어진다.
각 데이터 집합의 첫 번째 줄에는 점수가 매겨진 단어 또는 구절의 개수 $n$이 주어진다.
그다음에는 $n$개의 줄 쌍이 이어진다. 각 쌍의 첫 번째 줄에는 최대 80자의 핵심 구절이 주어지며, 소문자와 공백 문자로만 이루어진다. 두 번째 줄에는 그 구절의 점수인 정수(양수 또는 음수)가 주어진다.
$n$개의 쌍 다음에는 최대 10000자의 줄이 하나 더 주어지며, 여기에는 후보의 연설이 담겨 있다. 이 줄은 소문자, 공백 문자, 그리고 문장 부호 .와 ,로만 이루어진다. 연설은 항상 한 줄로 주어지며, 줄바꿈을 포함하지 않는다.
각 데이터 집합에 대해, 먼저 Data Set x: 형식의 줄을 출력한다. 여기서 x는 데이터 집합의 번호이다(첫 번째 데이터 집합의 번호는 1이다). 그다음 줄에 연설의 총점을 출력한다.
총점은 모든 핵심 구절에 대해 (구절의 점수) × (그 구절이 연설에 등장하는 횟수)를 합한 값이다(여러 번 등장하는 구절은 여러 번 계산한다). 서로 다른 구절은 각각 독립적으로 센다. 따라서 짧은 구절이 더 긴 구절 안에 포함되어 나타나더라도 그 짧은 구절은 여전히 센다. 구절은 연설의 정확한 부분 문자열로만 일치시킨다. 공백의 개수가 조금이라도 다르면 같은 구절로 보지 않는다.