1. 程式人生 > >NOIP-模擬試題之小凱的疑惑題解

NOIP-模擬試題之小凱的疑惑題解

2018 NOIP 全套資料下載
◆描述
小凱手中有兩種面值的金幣,兩種面值均為正整數且彼此互素。每種金幣小凱都有 無數個。在不找零的情況下,僅憑這兩種金幣,有些物品他是 無法準確支付的。現在小凱想知道在無法準確支付的物品中,最貴的價值是多少金幣?注意:輸入資料保證存在小凱無法準確支付的商品。
◆輸入
輸入資料僅一行,包含兩個正整數 a 和 b,它們之間用一個空格隔開,表示小凱手 中金幣的面值。
◆輸出
輸出檔案僅一行,一個正整數 N,表示不找零的情況下,小凱用手中的金幣不能準確支付的最貴的物品的價值。
◆樣例輸入
3 7
1
◆樣例輸出
11
1
◆樣例說明
小凱手中有面值為3和7的金幣無數個,在不找零的前提下無法準確支付價值為1、 2、4、5、8、11 的物品,其中最貴的物品價值為 11,比 11 貴 的物品都能買到,比如:
12=3×4+7×0
13=3×2+7×1
14=3×0+7×2
15=3×5+7×0
◆資料範圍與約定
對於 30%的資料: 1≤a,b≤50。
對於 60%的資料: 1≤a,b≤104。
對於 100%的資料:1≤a,b≤109 。

②涉及數學知識補充:
◆同餘於(≡):https://wapbaike.baidu.com/item≡/8148854?fr=aladdin&anchor=4#4(ps:a≡m(mod b)等價於a=kb+m)
◆剩餘類:https://tieba.baidu.com/p/4259761686?referer=m.baidu.com&pn=0&
◆完全剩餘系:https://wapbaike.baidu.com/item/完全剩餘系/3712670?fr=aladdin

③解題思路
因為(a,b)=1,所以{0,a,2a,3a,…,(b−1)a}為模b的完全剩餘系。
設錢數為T,則T一定滿足(因為{ka}為模b的完全剩餘系):T≡ka(mod b),(0≤k≤b−1)。
若T≥ka,則T一定可以表示為ka+nb,(n≥0),所以T<0)則此時T最大為ka−b,
顯然,當k最大時T最大,所以T=(b−1)a−b=ab−a−b。

④程式碼
#include
using namespace std;
int main()
{
int long long a,b,t;
cin>>a>>b;
t=a*b-a-b;
cout<<t;
return 0;
}

⑤一題多解
找規律:http://m.blog.csdn.net/nimabide_01/article/details/78756525

⑥程式設計的得與失
⒈主要考察數論吧,涉及到的數學成分比較濃…數論並不好,還是查了一下資料才弄出來的……
⒉如果放到考場中的話,要麼暴力解,40分,要麼找規律了吧,(以我目前水平)做出來的可能性不大。
⒊作為第一題,很有做不出來導致心理狀態受影響,後面題目要穩住需要一定的心理素質(至少對我個人而言是需要的)
⒋考試時做20分鐘沒有算出公式的話就可以考慮放棄拿滿分了,換一種思路,要麼暴力要麼找規律蒙一下可能會好點

原文:https://blog.csdn.net/Helenal/article/details/78820604