SSL 2666勇闖黃金十二宮射手宮

2021-10-11 19:08:13 字數 1307 閱讀 4193

time limit:1000ms

memory limit:65536k第九個他們來到射手宮,身為射手座**聖鬥士的艾爾里斯是獅子座聖鬥士艾爾里亞的哥哥,他早在13年前就發現了撒加殺了真教皇,並且自己做了假教皇。然而他卻被撒加**致死。現在星矢四人已經來到了射手宮。艾爾里斯的靈魂想考驗一下這些聖鬥士們的水平,在射手宮的牆上留下了一道題目。 「已知艾爾里斯和弟弟艾爾里亞的基因基本相同,由於基因表達起來不方便,所以就用n個數字來表示。(因為至今共發現100000種基因,所以每個數字都<=100000)兄弟之間的基因個數是相同的,就是說他們都有n個數字。且對於每個人,這n個數字互不相同。現在要求兄弟之間基因的最長公共部分。可以不連續。」 如果,他們解決不了這題,就通不過射手宮了。不過還好,他們順利地通過了!

本題包含多組資料. 第1行,為n(1<=n<=100000) 下面2行,每行n個數字,表示了乙個人的所以基因。

對於每組資料輸出一行,為他們兩人基因的最長公共部分。

71 2 3 4 5 6 7

7 6 5 4 1 2 3

這道題是求最長公共子串行。

因為兩組數長度相同,所以可以轉換成求最長不下降序列。

先把兩組數按第一組的順序排序,再做第二組的最長不下降序列,時間複雜度為n*n,會超時,應該用二分查詢。

用乙個陣列模擬最長不下降序列,從前往後找,如果當前數》=模擬陣列中的最後乙個,直接往後加。否則二分查詢找到乙個前乙個數《當前數的位置,替換該數。

狀態轉移方程:

當a[i]>=b[ans],ans+1,b[ans]=a[i]

當a[i]#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

int n,d[

100010

],a[

100010

],f[

100010

],len,ans;

void

input()

for(i=

1;i<=n;i++)}

return;}

interfind

(int s)

else

}while

(l<=r)

;return l;

}void

work()

else

}printf

("%d"

,ans)

;return;}

intmain()

南陽OJ 語言入門 266

描述 給定一行字元,逆序輸出此行 空格.數字不輸出 輸入 第一行是乙個整數n n 10 表示測試資料的組數 每組測試資料佔一行,每行資料中間有且只有乙個空格 這樣你可以把此行當成兩個字串讀取 每行字元長度不超過40 並且保證輸入的字元只有空格 1個 數字,小寫字母三種 輸出對應每行測試資料,逆序輸出...

SICP練習 93 練習2 66

這道題相當於二叉樹在實際工程中的乙個運用,我們依舊要用到前面所學到的三個過程 entry,left branch,right branch。這三者的作用分別是取出結點 左分支 右分支。而根據題目要求,這裡還需要乙個獲取鍵值的key。當然了,就像書中上文所展示的那樣,key並不需要我們寫出來,這裡就用...

硬幣問題(劉汝佳266,)

題目描述 硬幣找零問題描述 現存在一堆面值為 v1 v2 v3 個單位的硬幣 問最多和最少需要多少個硬幣才能找出總值為t個單位的零錢?輸入 第一行為n,t,表示硬幣個數,需要湊的面額,第二行有n個數,表示硬幣的面額 輸出 一行,分別為最大最小的數目,用空格分開 示例 輸入 5 63 1 2 5 21...