題目連結: 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; | |
} | |
} |