bupt 127 最小距離查詢

2021-10-05 06:55:44 字數 1366 閱讀 1563

題目描述:

給定乙個由小寫字母a到z組成的字串s ,其中第i個字元為s[i] (下標從0開始) .你需要完成下面兩個操作:

insert c

其中c是一乙個待輸入的字元。你需要在字串的末尾新增這個字元。保證輸入的字元同樣是a到z之間的一乙個小寫字母.

query x

其中x是乙個輸入的整數下標。對於這個詢問,你需要回答在s當中和s[x]相等且與x最近的距離。輸入保證x在當前字串中合法。 例如s = 「abcaba」 ,如果我們操作: insert a 則在s的末端加乙個字元a , s變成abcabaa".

接下來操作 query 0

由於s[0]=a ,在s**現的離他最近的a在下標為3的位置上,距離為3-0=3.因此應當輸出3.

接下來,如果 query 4

s[4]=b, s中離它最近的b出現在下標為1處,距離為4- 1=3.同樣應當輸出3. 給定初始字串s和若干操作,對於每個query,你需要求出相應的距離。 hint由於輸入資料較大, c/c++中推薦使用scanf進行讀入以獲得更快的讀入速度。同時請注意演算法複雜度。

輸入格式:

輸入的第一行是一乙個正整數t(t < 20) ,表示測試資料的組數。 每組輸入資料的第一行是-乙個初始串s。第二行是一乙個正整數

m(1≤m≤100000),表示總共操作的數量。接下來m行,每行表示乙個操作。操作的格式如上所述。

資料保證在任何情況下,s的長度不會超過100000.

輸出格式:

對於每個query ,輸出所求的最小距離。如果s中其它位置都不存在和它相同的字元,輸出-1。

2

axb3

insert a

query 0

query 1

explore

3insert r

query 7

query 1

輸出樣例:

3-12

-1

#include

using

namespace std;

intmain()

scanf

("%d"

,&m)

;for

(int i =

0; i < m; i++

)elseif(

strcmp

(tmp,

"query")==

0)else

printf

("%d\n"

, min_value);}

}}}return0;

}

BUPT 複數集合

題目鏈結 乙個複數 x iy 集合,兩種操作作用在該集合上 1 pop 表示讀出集合中複數模值最大的那個複數,如集合為空 輸出 empty 不為空就輸出最大的那個複數並且從集合中刪除那個複數,再輸出集合的大小size 2 insert a ib 指令 a,b表示實部和虛部 將a ib加入到集合中 輸...

BUPT 查詢第K小數

查詢乙個陣列的第k小的數,注意同樣大小算一樣大。如 2 1 3 4 5 2 第三小數為3。輸入有多組資料。每組輸入n,然後輸入n個整數 1 n 1000 再輸入k。輸出第k小的整數。示例1 複製6 2 1 3 5 2 2 3複製 3題解 利用雜湊表排除重複數 include include usin...

BUPT複試專題 日期 2013

請你計算出第年月日是第x年的第幾天。其中,1月1日是第一天,1月2日是第二天,以此類推。計算時請注意閏年的影響。對於非整百年,年數能整除4是閏年,否則不是閏年 對於整百年,年數能整除400是閏年,否則不是閏年。如1900年和1901年不是閏年,而2000年和2004年是閏年。第一行有乙個整數,表示一...