51NOD 1449 砝碼稱重 貪心 進製思想

2021-08-01 07:17:03 字數 1002 閱讀 8539

題目連線:

1449 砝碼稱重

codeforces

基準時間限制:1 秒 空間限制:131072 kb 分值: 40 

難度:4級演算法題

現在有好多種砝碼,他們的重量是 w0

,w1,

w2,.

..每種各乙個。問用這些砝碼能不能表示乙個重量為m的東西。

樣例解釋:可以將重物和3放到乙個托盤中,9和1放到另外乙個托盤中。

input

單組測試資料。

第一行有兩個整數w,m (2 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9)。

output

如果能,輸出yes,否則輸出no。
input示例

3 7
output示例

yes
簡單的中文, 不簡單的思想;

剛開始 我認為可以 母函式的思想, 把能湊出來的數都列舉出來,然後看看m 在不在裡面,但是,  資料量過大,不好控制,  

後來,和我說 用進製的思想,  類似於2進製 10 進製 只有0 1這樣 來考慮  

也就是說  我們把 m, 轉換成 w進製的 乙個數, 當 餘數是 0 1 的時候 即, m 一定 能用w 來表示,  當m 與 w 之間 缺個1 就好比 9 與10 缺一  89 與100 後面的9 與10 缺1  

這樣是 我們可以通過加1 個或2 個 來做成平衡,  但是 當為其他情況時  差距超過2 時  無法用w 來表示;就是no

#include #include #include #include #include #include #include using namespace std;

int main()

else if((m+1)%w==0)//如果補1 後可以餘除

else

}if(!flag)

printf("yes\n");

}return 0;

}

51nod 1449 砝碼稱重

好題。如果答案為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的倍數,那麼才能使得等式成立。必要不充分條件 等式左右兩邊同...

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 發現網上...