題意:略
思路:一開始就是想到了正確的思路,但是**寫炸了,死活過不了。這題嘛,就是建議乙個魔咒與咒語的雙向對映。首先用字串hash將魔咒與咒語的hash值給算出來,之後用兩個map儲存魔咒的hash與魔咒下標,咒語的hash與咒語的下標。hash用的是優秀的bkdr演算法,好寫而且不容易衝突。最後查詢的時候有乙個技巧,就是如果說以』[『開頭,那麼肯定是魔咒,就輸出咒語,反之輸出魔咒。一開始確實是沒有想到如果說魔咒的hash和咒語的hash衝突了怎麼辦,那麼就用上面所說的那個技巧就可以完美解決。
**:
1 #include 2 #include3 #include 4
using
namespace
std;56
const
int maxn = 100005;7
int num = 0;8
9char mz[maxn][50
];10
char zy[maxn][100
];11
12 mapmpmz,mpzy;
1314 unsigned int myhash(char*s)
1523
24return (h & 0x7fffffff
);25}26
27void init(void)28
37}3839
intmain()
4057
58init();
5960
intn;
6162 scanf("
%d",&n);
6364
getchar();
6566
while (n--)
6781
else
8295}96
}9798return0;
99 }
hdu 1880 魔咒字典
題意 略 思路 一開始就是想到了正確的思路,但是 寫炸了,死活過不了。這題嘛,就是建議乙個魔咒與咒語的雙向對映。首先用字串hash將魔咒與咒語的hash值給算出來,之後用兩個map儲存魔咒的hash與魔咒下標,咒語的hash與咒語的下標。hash用的是優秀的bkdr演算法,好寫而且不容易衝突。最後查...
hdu1880(魔咒詞典)
1.下面是二分查詢 ac include include include define max 100005 typedef struct node node node mag1 max node mag2 max int cmp1 const void a,const void b int cmp...
魔咒詞典 HDU 1880
感覺這題巨毒瘤,讀入字串方面調了好久才避免了讀入空白字元。思路就是對每條資訊的魔咒和功能的記錄在s1和s2串裡,並在ihash陣列裡通過資訊的編號 cnt 確定存放的列,將魔咒 魔咒的hash值存在第一行 或功能 功能的hash值存在第2行 的hash值存入。然後輸入乙個要查詢的字串,就先求出其ha...