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...