nyoj133 子串行 雜湊 佇列

2021-07-09 04:29:58 字數 1231 閱讀 2138

描述

給定乙個序列,請你求出該序列的乙個連續的子串行,使原串中出現的所有元素皆在該子串行中出現過至少1次。

如2 8 8 8 1 1,所求子串就是2 8 8 8 1。

輸入

第一行輸入乙個整數t(0

輸出對於每組輸入,輸出包含該序列中所有元素的最短子串行的長度

樣例輸入

2

51 8 8 8 1

62 8 8 8 1 1

樣例輸出

2

5

題目簡單,實際很坑,考慮不完整就錯,思路就是從每次記錄每個數字的出現次數,由於範圍是2^32,所以用雜湊存,注意雜湊 每個樣例清零的時候,delete後,指標不會變為null要手動賦值,這點坑了太久,哎,基礎功不紮實,然後注意隊首的hash(front)>1時,考慮彈出,注意坑的地方在你不能從左到右掃到第乙個後面沒有的值,再從右到左掃到前面沒有出現的值,這樣不是最優解,比如考慮1,2,3,4,4,1,2,4,2,3,這樣得到答案為5,錯誤,**如下:

#include#include#include#includeusing namespace std;

const int m=1000001;

int inf=1<<28;

struct node

node(int a)

};node no[m];

void del(node * h)

int t;

int hash_size;

bool hash1(int x)

else p=p->next;

} p=new node(x);

p->next=no[t].next;

no[t].next=p;

hash_size++;

return 0;

}bool hash2(int x)

else return 0;

} else p=p->next;

} return 0;

}int main(){

int t,n,ans;

int x;

bool f;

scanf("%d",&t);

getchar();

while(t--){

for (int i=0;iq;

ans=inf;

hash_size=0;

for (int i=0;i

nyoj 133 子串行 尺取法 離散化

時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述 給定乙個序列,請你求出該序列的乙個連續的子串行,使原串中出現的所有元素皆在該子串行中出現過至少1次。如2 8 8 8 1 1,所求子串就是2 8 8 8 1。輸入 第一行輸入乙個整數t 0 輸出對於每組輸入,輸出包含該序列中所有...

nyoj 133 子串行 (離散化 尺取法)

時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述 給定乙個序列,請你求出該序列的乙個連續的子串行,使原串中出現的所有元素皆在該子串行中出現過至少1次。如2 8 8 8 1 1,所求子串就是2 8 8 8 1。輸入 第一行輸入乙個整數t 0 輸出對於每組輸入,輸出包含該序列中所有...

nyoj 最長公共子串行

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述咱們就不拐彎抹角了,如題,需要你做的就是寫乙個程式,得出最長公共子串行。tip 最長公共子串行也稱作最長公共子串 不要求連續 英文縮寫為lcs longest common subsequence 其定義是,乙個序列 s 如果分別...