POJ 3080 Blue Jeans 三種暴力法

2021-06-23 01:28:23 字數 2246 閱讀 9045

本題可以使用暴力法直接求解,思路也挺簡單的,不過實現起來也挺麻煩的。

本題最暴力直接使用strstr過。 這裡使用hash表的方法過,這種方法好像有個學名的,主要思路就是把乙個需要查詢的字串賦予乙個數值,那麼就可以把一串字串的比較轉換為乙個值的比較了,那麼就可以加速字串的查詢了。

#include #include #include const long long mod = (int)(1e9+7);//如果增加mod的話,會有很大機率出錯的,本題就不能增加mod,否則一直wa,不使用mod就馬上ac了

const int max_n = 61;

const int max_m = 11;

const int alp_len = 4;

const int significant = 3;

const char *inttochar = "atgc";

short chartoint[256];

char dict[max_m][max_n];

char substr[max_n];

long long finger;

bool searchfinger(char *txt, int l, int len)

if (f == finger) return true;

for (int j = 0; i < len; j++, i++)

return false;

}int main()

int len = max_n - 1;

int maxlen = 0;

char res[max_n] = ;

for (int i = 0; i < len; i++)//search every start position

if (j != n) break;//break to the next start position

if (l > maxlen || (l==maxlen && strcmp(res, substr)>0))

}} if (maxlen < significant)

else

}return 0;

}

使用strstr也可以,時間效率是一樣的:

#include #include #include const int max_n = 61;

const int max_m = 11;

const int alp_len = 4;

const int significant = 3;

char dict[max_m][max_n];

char substr[max_n];

int main()

int len = max_n - 1;

int maxlen = 0;

char res[max_n] = ;

for (int i = 0; i < len; i++)//search every start position

if (j != n) break;//break to the next start position

if (l > maxlen || (l==maxlen && strcmp(res, substr)>0))

}} if (maxlen < significant)

else

}return 0;

}

使用strstr的第二種方法:

const int max_n = 61;

const int max_m = 11;

const int alp_len = 4;

const int significant = 3;

char dict[max_m][max_n];

char substr[max_n];

int main()

int len = max_n - 1;

int maxlen = 0;

char res[max_n];

for (int i = 0; i < len; i++)//search every start position

if (j == n)

break; //break to the next start position}}

} if (maxlen < significant)

else

}return 0;

}

poj解題報告 3080

題意 求n個字串的公共最長串。思路很簡單 我們先按字串的長度由短到長進行快排。列舉第乙個字串的不同長度子串,判斷她是否為下面多有的公共子串?如果是的話,那麼我們就表明找到,則比較其長度,如果比已經找到的串長,那麼就替換結果串 否則按字典序比較。取字典序考前的,就可以。如下 include inclu...

POJ 3080 字尾陣列 KMP

題意 給定n個dna串,求最長公共子串。如果最長公共子串的長度小於3時輸出no significant commonalities,否則輸出該子串,如有多解請輸出字典序最小的解 思路 是poj 3405的弱化版。思路請參考 define crt secure no deprecate include...

POJ 3080 字串匹配

題意 給出n個字串,找出其最長公共子串,若子串長度 3,則輸出最長公共子串,否則輸出.本來以為要用到kmp或者字尾陣列什麼的,思考了很久沒有思路,看了一下discuss,發現可以暴力過,而且0ms,也是醉了.include include include include include includ...