題目描述:
給定乙個由小寫字母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年是閏年。第一行有乙個整數,表示一...