1. 程式人生 > >【提高組NOIP2017】小凱的疑惑 通俗分析 咱們不數論

【提高組NOIP2017】小凱的疑惑 通俗分析 咱們不數論

      考場上我為了這道題目抓耳撓腮了一個小時無果,無奈只好寫了個30分的暴力,事後才知道這居然是一個小學奧數問題。。。好吧,可能我是個假的高中生。。。

      廢話不多說,上原題:

小凱手中有兩種面值的金幣,兩種面值均為正整數彼此互素。每種金幣小凱都有無數個。在不找零的情況下,僅憑這兩種金幣,有些物品他是無法準確支付的。現在小凱想知道在無法準確支付的物品中,最貴的價值是多少金幣?注意:輸入資料保證存在小凱無法準確支付的商品。 

例:如果小凱手中有面值為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

……

又比如兩個金幣的面值如果是3和10,那麼最大無法支付的價值為17。

      嗯。。。其實做這道題並不需要什麼特別的演算法,只需要找規律,把它們的數學關係找出來,數論厲害的當然可以用數論推,但我的數論不厲害,所以就推不出來了,只能找規律

      在遵循題目規則的前提下(a, b互質,且一定有湊不出來的數),打表的時候要注意打得要也有一定規則,這樣有助於我們分析,比如,我們多列幾組資料的時候,假設ab其中一個數不變,就另一個數遞增,然後儘可能得從簡單的開始列,比如可以:

(2, 3) -> 1

(2, 5) -> 3

(2, 7) -> 5

(2, 9) -> 7

(3, 4) -> 5

(3, 5) -> 7

(3, 7) -> 11

(3, 8) -> 13
……

從打表我們可以看出(賽場上多數人都是靠看出)這些都符合一個公式:(a, b) = a*b-(a+b)

      公式我們拿到了,接下來就是證明公式的正確性,不然我們用得也不放心,下面是這個公式的白話證明:

      請記住: a和b互質

      a*b - a 可看作是由a*b少了個a,這個數可以由(b-1)個a湊成,但由於a*b能被b整除,而a*b-a則是在a*b基礎上少了個a而已,根據a與b互質的關係,我們很容易能想到只用b是湊不出a*b-a的,假設b大於a,強行用a個b去湊也只能湊出a*b而這跟a*b-a差了一個a,無論用b怎麼湊都不能把多出來的a這個差距消掉,所以光用b湊不成,設b小於a也是同理。

      a*b - (a+b)即為a*b - a - b,我們進一步化成(a*b-a) -b,這時我們可以發現這是在a*b-a的基礎上又少了一個b,那麼這樣光用a也沒辦法湊出(a*b-a) -b這個數了,用b就更不用說了,有沒有可能用若干個a跟若干個b一起湊出來?不行,設b大於a,我們在前面推出來瞭如果用b去湊(a*b-a) 會多出來a,那麼用b湊(a*b-a) -b自然也是多出來a,因為你不可以有-1個a,所以想湊數的話只能慢慢一個一個挪走b,然後用a去湊空缺,看能不能補上。這個我們可以模擬一下,先強行用b去湊(a*b-a) -b,上面說過了,會比(a*b-a) -b多出a來,挪數開始,挪走一個b,會有(b-a)這個缺口產生,這個靠a沒法補上,挪走2個b,會有(2b-a)這個缺口產生,靠a還是沒法補上,挪走3個b...一直到挪走a個b,我們發現這時才有可以填上的第一個缺口(a*b-a),即(b-1)*a,可以用(b-1)個a補上,可是a*b-(a+b)哪裡來的a個b給你挪開。。。

      證畢

      證明完成了,那麼我們就可以開心地拿公式去代入做題了,不過問題又來了,看看資料限制,a,b最大可以有10^9,也就是說a*b會達到10^18這麼恐怖的資料規模,直接用long long能裝得下嗎?要不要用高精度啊?

      這就考驗我們的對資料類型範圍的瞭解程度了,事實上,long long的最大值9223372036854775807細細一數,正好19位,也就是說,10^18這個數用long long是完全沒問題的,AC這道題確實是只需三行程式碼,定義,輸入,代入公式輸出(史上最水,沒有之一),可是很多NOIP選手因為對資料範圍不夠了解,為了保險只好寫高精度,這裡就浪費了很多時間,跟我此次同行NOIP的一個校友,寫高精度寫了一個小時還沒寫對,一怒之下就把程式碼全刪掉,換上那三行程式碼,結果反而讓他“不小心”AC了,但是不管怎麼說也是浪費了一個小時啊!一個小時在考場上什麼概念就不用多說了吧!

       這次的題主要就是考驗我們的思維能力跟我們對資料範圍的準確理解,所以大家要重視平常知識的累積,像資料範圍這類跟我們正式考試息息相關的還是要有充分的認識好。

相關推薦

提高NOIP2017疑惑 通俗分析 咱們數論

      考場上我為了這道題目抓耳撓腮了一個小時無果,無奈只好寫了個30分的暴力,事後才知道這居然是一個小學奧數問題。。。好吧,可能我是個假的高中生。。。       廢話不多說,上原題: 小凱手中

NOIP2017提高 day1疑惑

題目 題解 –emmm怎麼說呢,畢竟是第一題,當然是打表咯哈哈哈哈哈 算出來答案是(a*b)-(a+b) 雖然不會證 能AC就行不是嗎 程式碼 #include<iostream> #

提高NOIP2017時間複雜度 題解 分治系統處理

原題邊幅很長,這裡就不貼出來了,落谷有原題,不清楚的可以去看看 ---------------------------------------------------------------------------------------------------------

NOIP2017疑惑

1-1 display 技術分享 一個 大整數 gif 而且 splay targe 本題在洛谷上的鏈接:https://www.luogu.org/problemnew/show/P3951#sub 這是去年復賽第一題,小凱的疑惑?我的疑惑?我的疑惑就是為什麽

提高NOIP2007矩陣取數遊戲

題目描述 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n*m的矩陣,矩陣中的每個元素a[i,j] 均為非負整數。遊戲規則如下: 每次取數時須從每行各取走一個元素,共n個。m次後取完矩陣所有元素; 每次取走的各個元素只能是該元素所在行的行首或行尾; 每次取數都有一個得分值,為每

提高NOIP2007樹網的核

此題不錯!(可惜考場沒時間打了 ) 兩種做法哦~,有種簡單但慢,有種快速但難想。。。 先講簡單的: Floyd+暴判 呵呵,標題好嚇人啊。 但其實真的很簡單,經過調查研究發現,F一定是在直徑上,所以所求最小偏心距也一定是在F上(也就是不可能在不是直徑的路徑上)。 上標: #i

提高NOIP2007字串的展開

這題嘛,直接按照題意照做即可,就是要小心一點啊。。。 #include<cstdio> #include<cstring> using namespace std; int p1,p2,p3,len,c[110]; char s[110]; int main(

提高NOIP2007統計數字

本題排序輸出即可。 #include<cstdio> #include<algorithm> using namespace std; int n,a[200010],tot=1; inline int read() { int x=0; char c=g

Get深一度波變換通俗解釋 -演算法與數學之美

連結:http://www.zhihu.com/question/22864189/answer/40772083 文章推薦人:楊曉東 從傅立葉變換到小波變換,並不是一個完全抽象的東西,可以講得很形象。小波變換有著明確的物理意義,如果我們從它的提出時所面對的問題看起,可以

NOIP2017提高Day1疑惑

題目描述 小凱手中有兩種面值的金幣,兩種面值均為正整數且彼此互素。每種金幣小凱都有 無數個。在不找零的情況下,僅憑這兩種金幣,有些物品他是無法準確支付的。現在小 凱想知道在無法準確支付的物品中,最貴的價值是多少金幣?注意:輸入資料保證存在 小凱無法準確支付的商品。 完整題面 題解:

JZOJ A學數學

Description 由於小凱上次在找零問題上的疑惑,給大家在考場上帶來了很大的麻煩,他決心好好學習數學 本次他挑選了位運算專題進行研究 他發明了一種叫做“小凱運算”的運算子: a$b =( (a&b) + (a|b) )>>1 他為了練習,寫了n個數在黑板上(

NOIP2017提高 day2寶藏

題目 題解 –這道題不是最小生成樹這道題不是最小生成樹這道題不是最小生成樹 因為修路的代價與它裡起點的距離有關,又因為最後的路徑一定組成了一棵樹 所以我們可以一層層的dp 設f[i][s]:到第i層時,已經連上的集合為s的最優解 轉移f[i][s|S]=min(f

NOIP2017提高 day2乳酪

題目 題解 –很簡單,就是n^2建圖,bfs一遍就好了,記得開longlong 程式碼 #include<iostream> #include<cstdio> #include<cstdlib> #include&l

NOIP2017提高 day1時間複雜度

題目 題解 –是一道噁心的模擬題 首先可以用一個棧存正在執行中的迴圈 用isv陣列判斷變數是否重名 要注意不能進入的迴圈雖然不會影響答案,但是要經過標記後也存入站內(為了判錯) 還要注意如果一個O(n)的迴圈如果在一個不能進入的迴圈內,答案是不會增加的 程

NOIP2017Day1T1 疑惑

【題目連結】【演算法】          px + qy不能表示的最大整數為 pq - p - q          證明見這篇部落格,過程很詳細,推薦閱讀 :          https://blog.csdn.net/qwerty1125/article/details

jzoj2017.8.21提高A

phi == efi edge log bsp scanf con include 太菜了,刷刷NOIP題玩玩。 今天的題好像以前有做過(霧) A. #include<bits/stdc++.h> typedef long long ll; int n,q,p

NOIP2016提高day2蚯蚓

AC AS orm max 可能 printf display OS 例如 題目 本題中,我們將用符號 LcJ 表示對 c 向下取整,例如: L3.0J = L3.1J = L3.9J = 3 。 蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去 請神

NOIP2016提高day1?換教室

獲得 表示 牛牛 所在 進行 發現 更換 學校 而且 題目 對於剛上大學的牛牛來說,他面臨的第一個問題是如何根據實際情況申請合適的 課程。 在可以選擇的課程中,有 2n 節課程安排在 n 個時間段上。 在第 i ( 1 ≤ i ≤ n )個 時間段上,兩節內容相同的課程同時

NOIP2016提高day2憤怒的小鳥

span math cst clas 解析式 ++ amp -- memset 分析 Kiana最近沈迷於一款神奇的遊戲無法自拔。 簡單來說,這款遊戲是在一個平面上進行的。 有一架彈弓位於 (0, 0) 處,每次Kiana可以用它向第一象限發射一只紅色的小鳥, 小鳥們的飛行

jzoj5935. NOIP2018模擬10.29學數學(區間dp)

5935. 【NOIP2018模擬10.29】小凱學數學 Description 由於小凱上次在找零問題上的疑惑,給大家在考場上帶來了很大的麻煩,他決心好好學習數學 本次他挑選了位運算專題進行研究 他發明了一種叫做“小凱運算”的運算子: a$b =( (a&b) + (a|b