xiaoxiaole
common.cpp
- #include "common.h"
common.h
- #ifndef COMMON_H_INCLUDED
- #define COMMON_H_INCLUDED
- /*--------------------------------------*/
- //0
- #define NULL (0)
- //1
- #define getx(blockPos) ((blockPos>>4)&0b1111)
- #define gety(blockPos) ((blockPos)&0b1111)
- //2
- #define getp(stateBlock) ((stateBlock>>16)&0b11111111)
- #define getpu(stateBlock) ((stateBlock>>8)&0b11111111)
- #define getpr(stateBlock) ((stateBlock)&0b11111111)
- /*--------------------------------------*/
- //2
- typedef unsigned char BlockPos;
- //3
- typedef int StateBlock;
- /*--------------------------------------*/
- /*--------------------------------------*/
- #endif // COMMON_H_INCLUDED
hash.cpp
- #include "hash.h"
- /*--------------------------------------*/
- //1
- Trie g_hash;
- /*--------------------------------------*/
- //1
- TrieNode::TrieNode()
- {
- this->s = 0;
- this->next = NULL;
- this->score = 0;
- }
- //1
- Trie::Trie()
- {
- TrieNode a;
- this->layer0.push_back(a);
- }
- //2
- bool Trie::isExited(vector<StateBlock> &v)
- {
- if (g_hash.layer0[0].next == NULL) return false;
- vector<TrieNode> *p = &g_hash.layer0; //point to vector layer 0
- int target, tmpL, l, r, mid;
- StateBlock tmps;
- bool foundflg;
- int vL = v.size();
- mid = 0;
- for (int i=0; i<vL; ++i) {
- p = (*p)[mid].next; //come to layer (i-1)
- tmpL = (*p).size();
- if (tmpL == 0) return false; //this layer is empty
- l = 0;
- r = tmpL-1;
- target = v[i];
- foundflg = false;
- while (l<=r) {
- mid = ((l+r)>>1);
- tmps = (*p)[mid].s;
- if (tmps == target) { //find the target
- foundflg = true;
- goto NEXT_LOOP;
- }
- else if (tmps < target) { //in second part
- l = mid + 1;
- } else { //in first part
- r = mid - 1;
- }
- }
- return false;
- NEXT_LOOP:;
- }
- if ((*p)[mid].exiFlg == true) {
- return true;
- }
- return false;
- }
- //3
- bool Trie::addOneState(vector<StateBlock> &v)
- {
- }
hash.h
- #ifndef HASH_H_INCLUDED
- #define HASH_H_INCLUDED
- /*--------------------------------------*/
- #include "common.h"
- /*--------------------------------------*/
- #include "vector"
- using namespace std;
- /*--------------------------------------*/
- //#define getStateExiFlg(StateBlock) (((StateBlock&0x8000)!=0)?1:0)
- /*--------------------------------------*/
- //1
- class TrieNode {
- public:
- StateBlock s;
- vector<TrieNode> *next;
- int score;
- TrieNode();
- };
- //2
- class Trie {
- public:
- vector<TrieNode> layer0;
- bool isExited(vector<StateBlock> &v);
- bool addOneState(vector<StateBlock> &v);
- Trie();
- };
- /*--------------------------------------*/
- //1
- extern Trie g_hash;
- /*--------------------------------------*/
- //1
- /*--------------------------------------*/
- #endif // HASH_H_INCLUDED
main.cpp
- #include "testfunc.h"
- /*--------------------------------------*/
- #include <iostream>
- using namespace std;
- /*--------------------------------------*/
- int main()
- {
- hash_test1();
- return 0;
- }
testfunc.cpp
- #include "testfunc.h"
- #include "common.h"
- #include "hash.h"
- /*--------------------------------------*/
- #include "stdio.h"
- using namespace std;
- /*--------------------------------------*/
- //1
- void hash_test1()
- {
- cout << g_hash.layer0
- return;
- }
testfunc.h
- #ifndef TESTFUNC_H_INCLUDED
- #define TESTFUNC_H_INCLUDED
- /*--------------------------------------*/
- //1
- void hash_test1();
- /*--------------------------------------*/
- #endif // TESTFUNC_H_INCLUDED
xiaoxiaole的更多相关文章
- 巨蟒python全栈开发-第15天 装饰器
一.今日内容总览 关于函数的装饰器1.装饰器(重点,难点)(要求:反复写,代码不多但是很绕) 开闭原则:(比如,菜单是拆散的,一点点搞的,用友拆散自己的功能,以后就不用开发了) (1)对功能的扩展开放 ...
- day05-控制流程之if/while/for
目录 控制流程之if判断 控制流程之while循环 控制流程之for循环 控制流程之if判断 if 其实就是根据条件来做出不同的反应,如果这样就这样干,如果那样就那样干 1. 如果:成绩 > 9 ...
随机推荐
- 安卓学习记录(四)——体温表APP
1.新建project file->new->new project,选择Basic Activity 2.在content_main.xml中添加一个List View 1 <Li ...
- 迷你商城后端管理系统 ———— stage2 项目的核心代码实现
应用程序主函数接口 @SpringBootApplication(scanBasePackages = {"org.linlinjava.litemall.db", "o ...
- JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)
1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...
- spl_autoload_register 实现自动加载
spl_autoload_register 注册给定的函数作为 __autoload 的实现 bool spl_autoload_register ([ callable $autoload_func ...
- Java基础(七)——多线程
一.概述 1.介绍 Java VM 启动的时候会有一个进程Java.exe,该进程中至少有一个线程负责Java程序的执行.而且这个线程运行的代码存在于main方法中,该线程称之为主线程.其实从细节上来 ...
- NLP与深度学习(五)BERT预训练模型
1. BERT简介 Transformer架构的出现,是NLP界的一个重要的里程碑.它激发了很多基于此架构的模型,其中一个非常重要的模型就是BERT. BERT的全称是Bidirectional En ...
- NOIP 模拟七 考试总结
T1匹配 签到大水题,这里有hash,kmp,ac自动机,还有后缀数组,后缀自动机任您挑选. 不过这个数据范围有些坑啊,re就很不爽.做法我还是比较倾向hash的,毕竟不论神魔字符算法,hash大都能 ...
- WinForm事件与消息
WinForm事件与消息 消息概述以及在C#下的封装 Windows下应用程序的执行是通过消息驱动的.所有的外部事件,如键盘输入.鼠标移动.按动鼠标都由OS系统转换成相应的"消息" ...
- Scala trait特质 深入理解
Scala trait特质 深入理解 初探Scala 特质trait 在Scala中,trait(特质)关键字有着举足轻重的作用.就像在Java中一样,我们只能在Scala中通过extends进行单一 ...
- 微信公众号开发之H5页面跳转到指定的小程序
前言: 最近公司有一个这样的需要,需要从我们在现有的公众号H5页面中加一个跳转到第三方小程序的按钮.之前只知道小程序之间是可以相互跳转的,今天查阅了下微信开发文档原来现在H5网页也支持小程序之间的跳转 ...