HDU 4886 hash 暴力列舉

2021-08-02 20:39:37 字數 1364 閱讀 8179

題意:給乙個主串s(只包括

『a』『b』

『c』『d』

『e』『f』

『g』『h』

),然後要找出乙個串ans(也只包括

『a』『b』『c』『d』『e』『f』『g』『h』

),ans滿足條件:在s所有子串中沒出現過,其次保證長度最短,最後保證字典序最小。

思路:可以估計ans的長度最長為7,因為要使主串s中存在所有的8個字元的排列需要長度為8^7,已經超過了題目給定長度。列舉所有長度的子串,然後將字串雜湊成進製數,可以是8進製,也可以是9進製的,不過兩者還會有所不同。

8進製很明顯aabcad就對應001203(基數為8),而且發現也不會爆int範圍。列舉長度1-7的所有子串,並將它們當成8進製存在雜湊表中,每次列舉前都要將雜湊表清空,再從小到大遍歷雜湊表,將第乙個沒用過的下標換成字串輸出即可,需要注意0可以表示a,也可以aaa,所以當位數(子串長度)不夠時,通過前導零補上即加'a'。

9進製aabcad對應112314(基數為9),也不會爆int,所以所有9進製中存在0的數都是不合法的,可以通過在轉換成字串的過程中,如果發現某時剩餘的數能夠整除9,則代表轉換成9進製該位為0,即為不合法。則尋找到第乙個合法的下標轉換成字串即為ans。

code(base 8):

#include using namespace std;

const int maxn = 1e6+5;

char s[maxn], ans[10];

int hs[maxn*3], wei[10];

int main()

++hs[k];

}cnt = 0;

for(int j = 0; j < wei[i]; ++j)

if(!hs[j])

puts(""); cnt = -1;

break;

}if(cnt == -1) break;

} }return 0;

}

code(base 9):

#include using namespace std;

const int maxn = 1e6+5;

char s[maxn], ans[10];

int vis[maxn*6], wei[10];

int main()

} for(int j = 1, k; j < maxn*6; ++j)

if(!vis[j])

if(!tmp)

}reverse(ans, ans+cnt);

printf("%s\n", ans);

} return 0;

}

繼續加油~

HDU4454 暴力列舉

這題一開始就想到的是三分法,不過太菜了寫不來。只能暴力了精度要求較低0.01即可。由於以前計算幾何的題目幾乎沒寫過幾道,於是寫的時候各種 不規範wa了幾次。也難怪這次在成都f出現問題導致最終沒拿到牌。要注意的是如何求一點到正方形的距離,一開始我套了模版求點到四條邊的最短距離的最小值,果斷超時了0.0...

HDU 1172 猜數字 暴力列舉

problem description 猜數字遊戲是gameboy最喜歡的遊戲之一。遊戲的規則是這樣的 計算機隨機產生乙個四位數,然後玩家猜這個四位數是什麼。每猜乙個數,計算機都會告訴玩家猜對幾個數字,其中有幾個數字在正確的位置上。比如計算機隨機產生的數字為1122。如果玩家猜1234,因為1,2這...

HDU 2089 不要62(暴力列舉)

hdu 2089 不要62 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 62315 ...