牛客網小白月賽6D 字串絲帶
阿新 • • 發佈:2018-12-10
時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 65536K,其他語言131072K 64bit IO Format: %lld 題目描述 WHZ送給了HtBest一個“字串絲帶”,這條絲帶由n個小寫字母按照一定的順序排列組成,HtBest收到新禮物後有許多問題,類似“第i個位置的字母在前i個位置中出現了幾次?”,HtBest很希望知道答案,於是求助你幫忙解答。
輸入描述: 第一行有2個正整數n,m,分別表示絲帶長度和問題個數。 第二行,有n個小寫字母,第i個表示絲帶第i位的小寫字母。 接下來有m行,每行一個正整數 ,表示HtBest的一個問題。 輸出描述: 共m行,對於每個問題,給出答案。
示例1 輸入
3 3
abc
1
2
3
輸出
1
1
1
示例2 輸入
4 4
abba
1
2
3
4
輸出
1
1
2
2
示例3 輸入
7 7
yyuahhy
7
6
5
4
3
2
1
輸出
3
2
1
1
1
2
1
備註: 對於100%的測試資料: 1 ≤ n ≤ 1000000 資料量較大,注意使用更快的輸入輸出方式。
該題可以用桶儲存每個字元在當前的出現次數,從頭開始,出現的字母的桶加1,然後用這個數打表
程式碼
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamTokenizer; import java.util.stream.Stream; public class Main { static StreamTokenizer sc = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); public static void main(String[] args) throws IOException { int n = getInt(); int m = getInt(); int[] z = new int[233]; String sss = getS(); int out[] = new int[sss.length() + 1]; for (int i = 0; i < sss.length(); i++) { out[i] = ++z[sss.charAt(i)]; } StringBuilder ss = new StringBuilder(); while (--m > 0) { ss.append(out[getInt()-1]+"\n"); } ss.append(out[getInt()-1]); System.out.println(ss); } static int getInt() throws IOException{ sc.nextToken(); return (int)sc.nval; } static String getS() throws IOException{ sc.nextToken(); return sc.sval; } }