@@ -179,57 +179,39 @@ class HalfKAv2_hm {
179
179
v[us_rook][opp_rook][us_knight_cannon][opp_knight_cannon] = [&] {
180
180
if (us_rook == opp_rook)
181
181
{
182
- // === 均势车力局面 (8个桶 ) ===
183
- int minor_adv = static_cast < int > (us_knight_cannon)
184
- - static_cast < int >( opp_knight_cannon);
182
+ // === 均势车力局面 (10个桶 ) ===
183
+ bool is_complex = (us_knight_cannon + opp_knight_cannon >= 4 );
184
+ bool is_equal = (us_knight_cannon == opp_knight_cannon);
185
185
186
- if (us_rook == 2 ) // 双方双车,最复杂,值得细分优势 (4个桶 )
186
+ if (us_rook == 0 ) // 双方无车 (2个桶 )
187
187
{
188
- if (minor_adv == 0 )
189
- return 0 ; // 均势
190
- if (minor_adv == 1 )
191
- return 1 ; // 我方稍优
192
- if (minor_adv == -1 )
193
- return 2 ; // 对方稍优
194
- return 3 ; // 其他不平衡
188
+ return is_equal ? 0 : 1 ;
195
189
}
196
- else if (us_rook == 1 ) // 双方单车,只分平衡与否 (2个桶 )
190
+ else // 双方有车 (8个桶 )
197
191
{
198
- return (minor_adv == 0 ) ? 4 : 5 ;
199
- }
200
- else // 双方无车,只分平衡与否 (2个桶 )
201
- {
202
- return (minor_adv == 0 ) ? 6 : 7 ;
192
+ // 逻辑与基线相同,但桶号需要偏移
193
+ // us_rook=1 -> group 1 (桶 2-5)
194
+ // us_rook=2 -> group 2 (桶 6-9 )
195
+ uint8_t sub_bucket = is_complex * 2 + is_equal;
196
+ return (us_rook - 1 ) * 4 + 2 + sub_bucket ;
203
197
}
204
198
}
205
199
else
206
200
{
207
- // === 非均势车力局面 (8个桶 ) ===
208
- // 与我第一次给出的方案一的这部分逻辑相同,但现在它是一个混合模型的一部分
201
+ // === 非均势车力局面 (6个桶 ) ===
202
+ // 每个组合一个桶,桶号从10开始
209
203
if (us_rook == 2 && opp_rook == 1 )
210
- {
211
- return (us_knight_cannon >= opp_knight_cannon) ? 8 : 9 ;
212
- }
213
- else if (us_rook == 1 && opp_rook == 2 )
214
- {
215
- return (us_knight_cannon <= opp_knight_cannon) ? 10 : 11 ;
216
- }
217
- else if (us_rook == 2 && opp_rook == 0 )
218
- {
204
+ return 10 ;
205
+ if (us_rook == 1 && opp_rook == 2 )
206
+ return 11 ;
207
+ if (us_rook == 2 && opp_rook == 0 )
219
208
return 12 ;
220
- }
221
- else if (us_rook == 0 && opp_rook == 2 )
222
- {
209
+ if (us_rook == 0 && opp_rook == 2 )
223
210
return 13 ;
224
- }
225
- else if (us_rook == 1 && opp_rook == 0 )
226
- {
211
+ if (us_rook == 1 && opp_rook == 0 )
227
212
return 14 ;
228
- }
229
- else // us_rook == 0 && opp_rook == 1
230
- {
231
- return 15 ;
232
- }
213
+ // else us_rook == 0 && opp_rook == 1
214
+ return 15 ;
233
215
}
234
216
}();
235
217
return v;
0 commit comments