From fec72b8e1432f86145ed7db7fd6c88d9f4676f80 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Sat, 30 Sep 2023 00:59:56 +0800 Subject: [PATCH] adjust --- src/autotest.py | 2 +- src/include/client.h | 24 ++++++----------- src/include/dataload.h | 61 ++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 68 insertions(+), 19 deletions(-) diff --git a/src/autotest.py b/src/autotest.py index 833cae5..6a0f887 100755 --- a/src/autotest.py +++ b/src/autotest.py @@ -77,7 +77,7 @@ XXX..X....X.XX..X... mine_rate=0.133 total_round=0 win_round=0 -for i in range(0,10): +for i in range(0,1): for data in built_in_test_cases: fn=open("tmp/test.in","w") fn.write(data) diff --git a/src/include/client.h b/src/include/client.h index 0efdf3e..4a53077 100644 --- a/src/include/client.h +++ b/src/include/client.h @@ -520,11 +520,9 @@ double EstimateProb(std::pair pos, double default_p = 0.06) { (visible_status % vis_line_base) * vis_line_base * vis_line_base + ((visible_status / vis_line_base) % vis_line_base) * vis_line_base + visible_status / (vis_line_base * vis_line_base); - if (DataLoad::visible_to_probability.find(visible_status) != - DataLoad::visible_to_probability.end()) + if (DataLoad::visible_to_probability.have(visible_status)) ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0); - if (DataLoad::visible_to_probability.find(invers_vis_status) != - DataLoad::visible_to_probability.end()) + if (DataLoad::visible_to_probability.have(invers_vis_status)) ps.push_back(DataLoad::visible_to_probability[invers_vis_status] / 255.0); } if (pos.second - 3 >= 0) { @@ -540,11 +538,9 @@ double EstimateProb(std::pair pos, double default_p = 0.06) { (visible_status % vis_line_base) * vis_line_base * vis_line_base + ((visible_status / vis_line_base) % vis_line_base) * vis_line_base + visible_status / (vis_line_base * vis_line_base); - if (DataLoad::visible_to_probability.find(visible_status) != - DataLoad::visible_to_probability.end()) + if (DataLoad::visible_to_probability.have(visible_status)) ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0); - if (DataLoad::visible_to_probability.find(invers_vis_status) != - DataLoad::visible_to_probability.end()) + if (DataLoad::visible_to_probability.have(invers_vis_status)) ps.push_back(DataLoad::visible_to_probability[invers_vis_status] / 255.0); } if (pos.first + 3 <= rows - 1) { @@ -560,11 +556,9 @@ double EstimateProb(std::pair pos, double default_p = 0.06) { (visible_status % vis_line_base) * vis_line_base * vis_line_base + ((visible_status / vis_line_base) % vis_line_base) * vis_line_base + visible_status / (vis_line_base * vis_line_base); - if (DataLoad::visible_to_probability.find(visible_status) != - DataLoad::visible_to_probability.end()) + if (DataLoad::visible_to_probability.have(visible_status)) ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0); - if (DataLoad::visible_to_probability.find(invers_vis_status) != - DataLoad::visible_to_probability.end()) + if (DataLoad::visible_to_probability.have(invers_vis_status)) ps.push_back(DataLoad::visible_to_probability[invers_vis_status] / 255.0); } if (pos.first - 3 >= 0) { @@ -580,11 +574,9 @@ double EstimateProb(std::pair pos, double default_p = 0.06) { (visible_status % vis_line_base) * vis_line_base * vis_line_base + ((visible_status / vis_line_base) % vis_line_base) * vis_line_base + visible_status / (vis_line_base * vis_line_base); - if (DataLoad::visible_to_probability.find(visible_status) != - DataLoad::visible_to_probability.end()) + if (DataLoad::visible_to_probability.have(visible_status)) ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0); - if (DataLoad::visible_to_probability.find(invers_vis_status) != - DataLoad::visible_to_probability.end()) + if (DataLoad::visible_to_probability.have(invers_vis_status) ) ps.push_back(DataLoad::visible_to_probability[invers_vis_status] / 255.0); } for (int i = 0; i < ps.size(); i++) res += ps[i] * ps[i]; diff --git a/src/include/dataload.h b/src/include/dataload.h index 3da8fad..32c6689 100644 --- a/src/include/dataload.h +++ b/src/include/dataload.h @@ -8,9 +8,66 @@ typedef long long LL; const int buf_size = 4412555 * 4; unsigned char buf[buf_size], data[buf_size]; bool already_have[14348907]; -std::unordered_map visible_to_probability; +// std::unordered_map visible_to_probability; int rid[15] = {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2}; int cid[15] = {0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4}; +class HashTable +{ + struct Node + { + LL key; + unsigned char value; + Node* next; + Node(LL k,unsigned char v):key(k),value(v),next(nullptr){} + }; + Node* table[14348907]; +public: + HashTable() + { + for(int i=0;i<14348907;i++) + table[i]=nullptr; + } + ~HashTable() + { + for(int i=0;i<14348907;i++) + { + Node* p=table[i]; + while(p) + { + Node* q=p->next; + delete p; + p=q; + } + } + } + unsigned char& operator[](LL key) + { + int index=key%14348907; + Node* p=table[index]; + while(p) + { + if(p->key==key) + return p->value; + p=p->next; + } + p=new Node(key,0); + p->next=table[index]; + table[index]=p; + return p->value; + } + bool have(LL key) + { + int index=key%14348907; + Node* p=table[index]; + while(p) + { + if(p->key==key) + return true; + p=p->next; + } + return false; + } +}visible_to_probability; } // namespace DataLoad void LoadData() { using namespace DataLoad; @@ -18,7 +75,7 @@ void LoadData() { size_t data_length = decompressData(buf, raw_length, data, buf_size); // std::cout<<"decompress finished.\n"<