Training:Hash及应用
HDU 1425:
http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=21604
排序输出前几个数,没什么难度。
1 |
|
HDU 1800:
http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=21605
输入可能带有前导0的 n 个数,输出数量最多的数。数据范围很大,用Hash表做。然而直接用int读入用map做也可以通过。
1 |
|
HDU 1496:
http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=18464
给出方程 a ∗ x 1 2 + b ∗ x 2 2 + c ∗ x 3 2 + d ∗ x 4 2 = 0 ,解的范围是[-100,100]。
方程中都是 x 2 ,所以在[0,100]内,进行折半搜索,求得的答案每个变量都有2种可能,所以最后乘16。
1 |
|
HDU 1228:
http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=21606
给出英文等式求和,很早之前ACM协会练过这道题,没有难度。
1 |
|
HDU 1043:
http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=17579
给出八数码初始状态,输出到标准状态的移动方法,多组输入。类似于紫书上的八数码问题,但是是多组输入,固定终止状态,所以进行BFS时要反向进行,然后对每次输入的 状态直接打印路径。
对于状态判重,紫书上的编码方式被称为康托展开,使用 n ! 对状态编码。
1 | const int fact[]={1,1,2,6,24,120,720,5040,40320,362880}; |
再利用数组记录当前状态当下一个状态的走法和下个状态的编号。打印路径时遍历链表不需要进行BFS。
1 |
|
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **