This commit is contained in:
2023-09-30 00:59:56 +08:00
parent 5e150ec020
commit fec72b8e14
3 changed files with 68 additions and 19 deletions

View File

@ -77,7 +77,7 @@ XXX..X....X.XX..X...
mine_rate=0.133 mine_rate=0.133
total_round=0 total_round=0
win_round=0 win_round=0
for i in range(0,10): for i in range(0,1):
for data in built_in_test_cases: for data in built_in_test_cases:
fn=open("tmp/test.in","w") fn=open("tmp/test.in","w")
fn.write(data) fn.write(data)

View File

@ -520,11 +520,9 @@ double EstimateProb(std::pair<int, int> 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) * vis_line_base + ((visible_status / vis_line_base) % vis_line_base) * vis_line_base +
visible_status / (vis_line_base * vis_line_base); visible_status / (vis_line_base * vis_line_base);
if (DataLoad::visible_to_probability.find(visible_status) != if (DataLoad::visible_to_probability.have(visible_status))
DataLoad::visible_to_probability.end())
ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0); ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0);
if (DataLoad::visible_to_probability.find(invers_vis_status) != if (DataLoad::visible_to_probability.have(invers_vis_status))
DataLoad::visible_to_probability.end())
ps.push_back(DataLoad::visible_to_probability[invers_vis_status] / 255.0); ps.push_back(DataLoad::visible_to_probability[invers_vis_status] / 255.0);
} }
if (pos.second - 3 >= 0) { if (pos.second - 3 >= 0) {
@ -540,11 +538,9 @@ double EstimateProb(std::pair<int, int> 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) * vis_line_base + ((visible_status / vis_line_base) % vis_line_base) * vis_line_base +
visible_status / (vis_line_base * vis_line_base); visible_status / (vis_line_base * vis_line_base);
if (DataLoad::visible_to_probability.find(visible_status) != if (DataLoad::visible_to_probability.have(visible_status))
DataLoad::visible_to_probability.end())
ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0); ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0);
if (DataLoad::visible_to_probability.find(invers_vis_status) != if (DataLoad::visible_to_probability.have(invers_vis_status))
DataLoad::visible_to_probability.end())
ps.push_back(DataLoad::visible_to_probability[invers_vis_status] / 255.0); ps.push_back(DataLoad::visible_to_probability[invers_vis_status] / 255.0);
} }
if (pos.first + 3 <= rows - 1) { if (pos.first + 3 <= rows - 1) {
@ -560,11 +556,9 @@ double EstimateProb(std::pair<int, int> 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) * vis_line_base + ((visible_status / vis_line_base) % vis_line_base) * vis_line_base +
visible_status / (vis_line_base * vis_line_base); visible_status / (vis_line_base * vis_line_base);
if (DataLoad::visible_to_probability.find(visible_status) != if (DataLoad::visible_to_probability.have(visible_status))
DataLoad::visible_to_probability.end())
ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0); ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0);
if (DataLoad::visible_to_probability.find(invers_vis_status) != if (DataLoad::visible_to_probability.have(invers_vis_status))
DataLoad::visible_to_probability.end())
ps.push_back(DataLoad::visible_to_probability[invers_vis_status] / 255.0); ps.push_back(DataLoad::visible_to_probability[invers_vis_status] / 255.0);
} }
if (pos.first - 3 >= 0) { if (pos.first - 3 >= 0) {
@ -580,11 +574,9 @@ double EstimateProb(std::pair<int, int> 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) * vis_line_base + ((visible_status / vis_line_base) % vis_line_base) * vis_line_base +
visible_status / (vis_line_base * vis_line_base); visible_status / (vis_line_base * vis_line_base);
if (DataLoad::visible_to_probability.find(visible_status) != if (DataLoad::visible_to_probability.have(visible_status))
DataLoad::visible_to_probability.end())
ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0); ps.push_back(DataLoad::visible_to_probability[visible_status] / 255.0);
if (DataLoad::visible_to_probability.find(invers_vis_status) != if (DataLoad::visible_to_probability.have(invers_vis_status) )
DataLoad::visible_to_probability.end())
ps.push_back(DataLoad::visible_to_probability[invers_vis_status] / 255.0); 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]; for (int i = 0; i < ps.size(); i++) res += ps[i] * ps[i];

View File

@ -8,9 +8,66 @@ typedef long long LL;
const int buf_size = 4412555 * 4; const int buf_size = 4412555 * 4;
unsigned char buf[buf_size], data[buf_size]; unsigned char buf[buf_size], data[buf_size];
bool already_have[14348907]; bool already_have[14348907];
std::unordered_map<LL,unsigned char> visible_to_probability; // std::unordered_map<LL,unsigned char> visible_to_probability;
int rid[15] = {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2}; 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}; 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 } // namespace DataLoad
void LoadData() { void LoadData() {
using namespace DataLoad; using namespace DataLoad;
@ -18,7 +75,7 @@ void LoadData() {
size_t data_length = decompressData(buf, raw_length, data, buf_size); size_t data_length = decompressData(buf, raw_length, data, buf_size);
// std::cout<<"decompress finished.\n"<<std::endl; // std::cout<<"decompress finished.\n"<<std::endl;
// already_have.rehash(4412555); // already_have.rehash(4412555);
visible_to_probability.rehash(4412555); // visible_to_probability.rehash(4412555);
const LL raw_line_base = 243; const LL raw_line_base = 243;
const LL vis_line_base = 100000; const LL vis_line_base = 100000;
int cnt=0; int cnt=0;