# String# Greedy# Input/Output

c381 - 聖經密碼

🔗 前往 ZeroJudge 原題

題目描述

題目要求將給定的 n 個單字連接成一個長字串,然後根據 m 個給定的索引,從長字串中提取對應位置的字元,組成一個新的單字並輸出。

解題思路

本題的核心思路是將輸入的單字逐一讀取並連接成一個長字串。然後,根據題目提供的索引,從長字串中提取字元。由於題目保證索引有效,因此可以直接使用索引提取字元。使用 scanf 讀取 n 和 m 的值,並在 n 和 m 都為 0 時結束程式。使用迴圈讀取單字並連接成一個字串,再使用迴圈讀取索引並提取字元。

複雜度分析

  • 時間複雜度: O(N + M),其中 N 是單字總長度,M 是索引數量。連接字串需要 O(N) 的時間,提取字元需要 O(M) 的時間。
  • 空間複雜度: O(N),主要用於儲存連接後的長字串。

程式碼

#include <iostream>
#include <string>
int main(){
	std::string a,b;
	int n,m;
	while(scanf("%d%d",&n,&m)>0){
		for(;n>0;n--){
			std::cin >> a;
			b+=a;
		}
		a.clear();
		for(;m>0;m--){
			scanf("%d",&n);
			printf("%c",b[n-1]);
		}
		b.clear();
		printf("\n");
	}
}

Discussion