描述
給定乙個序列,請你求出該序列的乙個連續的子串行,使原串中出現的所有元素皆在該子串行中出現過至少1次。
如2 8 8 8 1 1,所求子串就是2 8 8 8 1。
輸入
第一行輸入乙個整數t(0
輸出對於每組輸入,輸出包含該序列中所有元素的最短子串行的長度
樣例輸入
251 8 8 8 1
62 8 8 8 1 1
樣例輸出
25
題目簡單,實際很坑,考慮不完整就錯,思路就是從每次記錄每個數字的出現次數,由於範圍是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 如果分別...