1980 年代,以色列希伯來大學的數學家 Eliyahu Rips 和物理學家 Doron Witstum 利用電腦高速計算對比 (一套精密的數學運算模式),挑選聖經時代以來的 32 位知名人物,結果發現他們的名字和出生與死亡日期在《創世記》中都是編在一起的。後來他們把整本希伯來文聖經原文去除了所有字間距,連貫成總長 304805 個字 (因為根據傳說,摩西從上帝手中接受的聖經就是「字字相連,無一中斷」),採用電腦跳躍碼方式,在字串中尋找名字、單詞和詞組,最終找到了一系列相關信息。
現在,你也拿到了另一個不知名的古文獻,其中含有 N 個單字,你的任務是要把文中的文字「字字相連」,再依電腦所提供的 M 個整數 A1, A2, …, AM,從這個長字串找出第 A1, A2, …, AM 個字母併成一個單字。
例如:
所收到的文獻為:the quick brown fox jumps over the lazy dog
連接成一個長字串:thequickbrownfoxjumpsoverthelazydog
電腦提供的線索為:33, 11, 34, 19, 21, 33, 30, 32
所併成的單字:doomsday
範例測資
範例輸入 | 範例輸出 |
---|---|
EOF 輸入,每組測試資料的第一行是兩個正整數 N (N < 1000001) 和 M (M < 101)。 接下來的 N 行每行有一個英文單字,每個單字的長度不超過 100。最後一行有 M 個以空白隔開的正整數,所提供的數字不會超過字串的總長度。 當 N 和 M 均為 0 表示檔案結束,不須處理這組輸入。 | 對於每組測試資料,請輸出所擷取的文字於一行。 |
9 8 the quick brown fox jumps over the lazy dog 33 11 34 19 21 33 30 32 0 0 | doomsday |
解題思路
將所有英文單字加到一個字串之後,在收數字時就將字串的那一位 -1 (因為測資是從 1 開始算) 輸出即可,最後換行。
範例程式碼-ZeroJudge C381: 聖經密碼
#include <iostream>
using namespace std;
int main() {
int N, M;
while (cin >> N >> M)
{
if (N == 0 && M == 0) break;
string word = "";
for (int i = 0; i<N; i++)
{
string str;
cin >> str;
word += str;
}
for (int i = 0; i<M; i++)
{
int tmp;
cin >> tmp;
cout << word[tmp-1];
}
cout << "\n";
}
}
//ZeroJudge C381
//Dr. SeanXD