51nod 1449 砝碼稱重

2021-07-24 09:43:53 字數 542 閱讀 4675

好題。

如果答案為yes,則m可以表示為:

m=a[0]*w^0+a[1]*w^1+……

如果等號左右兩邊同時減去a[0]*w^0,即1、-1或者0,等號右邊必然是w的倍數,也就是說,等號左邊也必然是w的倍數。

也就是說,如果m、m-1或者m+1其中有乙個為w的倍數,那麼才能使得等式成立。(必要不充分條件)

等式左右兩邊同時消除a[0]*w^0的影響,再同除w,那麼就變成了乙個新的等式

m'=a[1]*w^0+a[2]*w^1+……

那麼又回到了一開始,重新判斷m'、m'-1或者m'+1其中是否有w的倍數。

迴圈結束的終止條件是m==1(或者m==0),如果中途存在m、m-1或者m+1沒有乙個是w的倍數的情況,則答案為no。

#includeusing namespace std;

int main()

if(m==1)

printf("yes\n");

else

printf("no\n");

}}

51nod 1449 砝碼稱重

現在有好多種砝碼,他們的重量是 w0,w1,w2,每種各乙個。問用這些砝碼能不能表示乙個重量為m的東西。單組測試資料。第一行有兩個整數w,m 2 w 10 9,1 m 10 9 如果能,輸出yes,否則輸出no。input 3 7 output yes 樣例解釋 樣例解釋 可以將重物和3放到乙個托盤...

51nod1449 砝碼稱重

現在有好多種砝碼,他們的重量是 w0,w1,w2,每種各乙個。問用這些砝碼能不能表示乙個重量為m的東西。樣例解釋 可以將重物和3放到乙個托盤中,9和1放到另外乙個托盤中。單組測試資料。第一行有兩個整數w,m 2 w 10 9,1 m 10 9 如果能,輸出yes,否則輸出no。3 7yes 發現網上...

51nod 1449 砝碼稱重

給培訓找貪心題的時候看到的,一道和貪心沒任何關係的小水題。首先如果有解,那麼有 i wai iwb i m iw ai iwbi m 容易發現若 m wx,w 1 mw x,w 1 那麼將等式兩邊除以wx w x後,左式必然 因為有解 將剩餘乙個 1 1,將其移至右邊將使得w m 1 w m 1 或...