核心洞察:2^10 = 1024 > 1000,10 隻老鼠可構成 10 位二進制,足以編碼 1000 種狀態。
k 的水瓶,其二進制第 i 位為 1,則讓第 i 隻老鼠喝一滴。瓶號 3 = 0000000011 → 第 1、2 隻老鼠喝。
瓶號 1000 = 1111101000 → 第 4、6、7、8、9、10 隻喝。
#include <stdio.h>
int main() {
int poison = 847; // 假設毒瓶
int dead = 0;
for (int i = 0; i < 10; i++) {
if (poison & (1 << i)) dead |= (1 << i); // 第 i 隻死
}
printf("毒瓶編號:%d\n", dead); // 輸出 847
return 0;
}
m 隻老鼠、t 輪測試,可檢測 (t+1)^m 瓶(每輪老鼠可喝/不喝/死/活多狀態)。