程式設計訓練 潛伏(9528)

2021-06-27 05:39:51 字數 897 閱讀 6289

題目:記錄長度為n(1 <= n <= 100000),全部由數字構成,需要多次查詢在該記錄的第i位後出現的第乙個兩位素數。
第一行,乙個全部由數字構成的字串,長度小於100000。 

第二行,乙個整數m(1 <= m <= 100000),表示oyy查詢的次數。

第3 … m+2行,每行乙個數字pi(pi保證不會超過給出字串的長度且大於零),請求出pi後乙個出現的兩位素數。

每個詢問一行,輸出題目要求的素數,如果不存在輸出「-1」。

12318515423123498418121213212363

581321

30

31

2323

2313

-1

個人**如下:
#include #include #include char s[100005];

int issushu(int sum)

int main()

s[i]='\0';

for(j=0;j=code;k--)//填充前面沒有素數的記錄

if(sss[k]==-1)

sss[k]=sss[j];

code=j;//記錄上一次填充到的位置,有利於減少次數,也通過判斷不等於-1時直接跳出填充的迴圈}}

scanf("%d",&n);

while(n--)

return 0;

}

思路:主要思路在於對乙個字串,每次都會尋找相同的東西,字串太長時,如果每次都去遍歷查詢,會導致演算法複雜度為o(n²);

於是可以直接遍歷這個字串,一次性把每個位置對應的素數記錄儲存下來,節省每次都去遍歷花費的時間。

程式設計訓練(三)

關於深度優先演算法 dfs 和廣度優先演算法 bfs 的一點東西。深度優先,本質應該是圖的遍歷,從某個頂點出發,訪問圖中的每乙個頂點,而深度優先就意味著它是優先選擇更深層次的頂點,用樹來看得的話,那就是最快到達某個葉子結點。一般步驟 1 選取圖中某一頂點vi為出發點,訪問並標記該頂點 2 以vi為當...

程式設計訓練 金幣

國王為他的忠誠的騎士支付金幣。在他服役的第一天,騎士收到一枚金幣。在接下來2天 第二天和第三天的服務 騎士每天收到2金幣。在未來三天 第五,第四,和第六天的服務 騎士每天收到三金幣。在未來四天 第七,第八,第九,和第十天的服務 騎士每天收到四金幣。這一模式的付款方式將繼續下去 在接下來的n天騎士每天...

程式設計訓練 打牌

牌只有1到9,手裡拿著已經排好序的牌a,對方出牌b,用程式判斷手中牌是否能夠壓過對方出牌。規則 出牌牌型有5種 1 一張 如4 則5 9可壓過 2 兩張 如44 則55,66,77,99可壓過 3 三張 如444 規則如 2 4 四張 如4444 規則如 2 5 五張 牌型只有12345 23456...