題目連結: https://zerojudge.tw/ShowProblem?problemid=e809

# 解題思路

運用 map 將原字串轉為數字陣列的形式,再用計算出現的次數,再用前綴和計算自身元素之前的所有數量,最後再用二分搜找答案即可

# 程式碼

#include<bits/stdc++.h>
using namespace std;
int main(){
	string rule,s;
	cin >> rule >> s;
	map<char,int>m;
	for(int i=0 ; i < rule.size() ; ++i){
		m[rule[i]] = i;
	}
	int cnt[30]={0};
	for(int i=0 ; i < s.size() ; ++i ){
		++cnt[m[s[i]]] ;
	}
	for(int i=1 ; i < rule.size() ; ++i ){
		cnt[i] += cnt[i-1];
	}
	int N ,num;
	cin >> N;
	while(N--){
		cin >> num;
		int tmp = lower_bound(cnt,cnt+rule.size(),num) - cnt;
		cout << rule[tmp] << endl;
	}
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay