common.cpp

  1. #include "common.h"

common.h

  1. #ifndef COMMON_H_INCLUDED
  2. #define COMMON_H_INCLUDED
  3. /*--------------------------------------*/
  4. //0
  5. #define NULL (0)
  6. //1
  7. #define getx(blockPos) ((blockPos>>4)&0b1111)
  8. #define gety(blockPos) ((blockPos)&0b1111)
  9. //2
  10. #define getp(stateBlock) ((stateBlock>>16)&0b11111111)
  11. #define getpu(stateBlock) ((stateBlock>>8)&0b11111111)
  12. #define getpr(stateBlock) ((stateBlock)&0b11111111)
  13. /*--------------------------------------*/
  14. //2
  15. typedef unsigned char BlockPos;
  16. //3
  17. typedef int StateBlock;
  18.  
  19. /*--------------------------------------*/
  20.  
  21. /*--------------------------------------*/
  22. #endif // COMMON_H_INCLUDED

hash.cpp

  1. #include "hash.h"
  2. /*--------------------------------------*/
  3. //1
  4. Trie g_hash;
  5. /*--------------------------------------*/
  6. //1
  7. TrieNode::TrieNode()
  8. {
  9. this->s = 0;
  10. this->next = NULL;
  11. this->score = 0;
  12. }
  13.  
  14. //1
  15. Trie::Trie()
  16. {
  17. TrieNode a;
  18. this->layer0.push_back(a);
  19. }
  20. //2
  21. bool Trie::isExited(vector<StateBlock> &v)
  22. {
  23. if (g_hash.layer0[0].next == NULL) return false;
  24.  
  25. vector<TrieNode> *p = &g_hash.layer0; //point to vector layer 0
  26. int target, tmpL, l, r, mid;
  27. StateBlock tmps;
  28. bool foundflg;
  29.  
  30. int vL = v.size();
  31. mid = 0;
  32. for (int i=0; i<vL; ++i) {
  33. p = (*p)[mid].next; //come to layer (i-1)
  34. tmpL = (*p).size();
  35. if (tmpL == 0) return false; //this layer is empty
  36.  
  37. l = 0;
  38. r = tmpL-1;
  39. target = v[i];
  40. foundflg = false;
  41. while (l<=r) {
  42. mid = ((l+r)>>1);
  43. tmps = (*p)[mid].s;
  44. if (tmps == target) { //find the target
  45.  
  46. foundflg = true;
  47. goto NEXT_LOOP;
  48. }
  49. else if (tmps < target) { //in second part
  50. l = mid + 1;
  51. } else { //in first part
  52. r = mid - 1;
  53. }
  54. }
  55. return false;
  56. NEXT_LOOP:;
  57. }
  58. if ((*p)[mid].exiFlg == true) {
  59. return true;
  60. }
  61. return false;
  62. }
  63. //3
  64. bool Trie::addOneState(vector<StateBlock> &v)
  65. {
  66.  
  67. }

hash.h

  1. #ifndef HASH_H_INCLUDED
  2. #define HASH_H_INCLUDED
  3. /*--------------------------------------*/
  4. #include "common.h"
  5. /*--------------------------------------*/
  6. #include "vector"
  7. using namespace std;
  8. /*--------------------------------------*/
  9. //#define getStateExiFlg(StateBlock) (((StateBlock&0x8000)!=0)?1:0)
  10. /*--------------------------------------*/
  11. //1
  12. class TrieNode {
  13. public:
  14. StateBlock s;
  15. vector<TrieNode> *next;
  16. int score;
  17.  
  18. TrieNode();
  19. };
  20.  
  21. //2
  22. class Trie {
  23. public:
  24. vector<TrieNode> layer0;
  25.  
  26. bool isExited(vector<StateBlock> &v);
  27. bool addOneState(vector<StateBlock> &v);
  28.  
  29. Trie();
  30. };
  31. /*--------------------------------------*/
  32. //1
  33. extern Trie g_hash;
  34. /*--------------------------------------*/
  35. //1
  36.  
  37. /*--------------------------------------*/
  38. #endif // HASH_H_INCLUDED

main.cpp

  1. #include "testfunc.h"
  2. /*--------------------------------------*/
  3. #include <iostream>
  4. using namespace std;
  5. /*--------------------------------------*/
  6.  
  7. int main()
  8. {
  9. hash_test1();
  10.  
  11. return 0;
  12. }

testfunc.cpp

  1. #include "testfunc.h"
  2. #include "common.h"
  3. #include "hash.h"
  4. /*--------------------------------------*/
  5. #include "stdio.h"
  6. using namespace std;
  7. /*--------------------------------------*/
  8.  
  9. //1
  10. void hash_test1()
  11. {
  12.  
  13. cout << g_hash.layer0
  14. return;
  15. }

testfunc.h

  1. #ifndef TESTFUNC_H_INCLUDED
  2. #define TESTFUNC_H_INCLUDED
  3. /*--------------------------------------*/
  4. //1
  5. void hash_test1();
  6.  
  7. /*--------------------------------------*/
  8. #endif // TESTFUNC_H_INCLUDED

xiaoxiaole的更多相关文章

  1. 巨蟒python全栈开发-第15天 装饰器

    一.今日内容总览 关于函数的装饰器1.装饰器(重点,难点)(要求:反复写,代码不多但是很绕) 开闭原则:(比如,菜单是拆散的,一点点搞的,用友拆散自己的功能,以后就不用开发了) (1)对功能的扩展开放 ...

  2. day05-控制流程之if/while/for

    目录 控制流程之if判断 控制流程之while循环 控制流程之for循环 控制流程之if判断 if 其实就是根据条件来做出不同的反应,如果这样就这样干,如果那样就那样干 1. 如果:成绩 > 9 ...

随机推荐

  1. 安卓学习记录(四)——体温表APP

    1.新建project file->new->new project,选择Basic Activity 2.在content_main.xml中添加一个List View 1 <Li ...

  2. 迷你商城后端管理系统 ———— stage2 项目的核心代码实现

    应用程序主函数接口 @SpringBootApplication(scanBasePackages = {"org.linlinjava.litemall.db", "o ...

  3. JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)

    1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...

  4. spl_autoload_register 实现自动加载

    spl_autoload_register 注册给定的函数作为 __autoload 的实现 bool spl_autoload_register ([ callable $autoload_func ...

  5. Java基础(七)——多线程

    一.概述 1.介绍 Java VM 启动的时候会有一个进程Java.exe,该进程中至少有一个线程负责Java程序的执行.而且这个线程运行的代码存在于main方法中,该线程称之为主线程.其实从细节上来 ...

  6. NLP与深度学习(五)BERT预训练模型

    1. BERT简介 Transformer架构的出现,是NLP界的一个重要的里程碑.它激发了很多基于此架构的模型,其中一个非常重要的模型就是BERT. BERT的全称是Bidirectional En ...

  7. NOIP 模拟七 考试总结

    T1匹配 签到大水题,这里有hash,kmp,ac自动机,还有后缀数组,后缀自动机任您挑选. 不过这个数据范围有些坑啊,re就很不爽.做法我还是比较倾向hash的,毕竟不论神魔字符算法,hash大都能 ...

  8. WinForm事件与消息

    WinForm事件与消息 消息概述以及在C#下的封装 Windows下应用程序的执行是通过消息驱动的.所有的外部事件,如键盘输入.鼠标移动.按动鼠标都由OS系统转换成相应的"消息" ...

  9. Scala trait特质 深入理解

    Scala trait特质 深入理解 初探Scala 特质trait 在Scala中,trait(特质)关键字有着举足轻重的作用.就像在Java中一样,我们只能在Scala中通过extends进行单一 ...

  10. 微信公众号开发之H5页面跳转到指定的小程序

    前言: 最近公司有一个这样的需要,需要从我们在现有的公众号H5页面中加一个跳转到第三方小程序的按钮.之前只知道小程序之间是可以相互跳转的,今天查阅了下微信开发文档原来现在H5网页也支持小程序之间的跳转 ...