五個演算法題。
第一題:
有n種硬幣,面額分別為1~n,每種硬幣都有無限個,假設要付款的金額為m。要求支付硬幣數最少。為多少?
答:m/n+!!(m%n) 很簡單的乙個題
第二題:
乙個數列:-1 2 -3 4 -5 6 。。。
詢問q次,每次詢問區間[l,r]的區間和,輸出每個詢問的答案.
答:第1個和第2個加起來為1,第3,4個加起來也為1........
所以前i項和為:
i/2+(i&1)*i;
區間和可以用前i項和算出來了。
第三題:
牛妹有剪刀,石頭,布(以0,1,2表示)三種卡片無限張。現在牛妹拿出n張排成一排。
然後你也拿出n張牌一一對應比對。若贏一局則獲得一分。若你想得k分。
現在輸入n,k和牛妹的n張牌分別是什麼,你想要恰好得k分,有多少種方法。
答:很容易想到答案跟牛妹每一張牌是什麼沒有關係。沒一張牌只需要考慮贏、不贏。
贏k分,那就是從n張牌中拿出k張贏,其他輸,所以組合數c(n,k).對於贏了答k張,只有一種方法,但是對於剩下的n-k張,都有平局和輸掉兩種情況,所以是2的n-k次方。兩者相乘就是答案。
結果很大對mod=1e9+7取餘,用到同餘定理。
求2的冪直接暴力求(當然也可以快速冪)
求組合數的時候用到除法,又要取餘,所以用到逆元。所以用到逆元公式(當然還有其他求法):pow(x,mod-2)%mod;
但是mod=1e9+7,所以暴力求冪會超時,方法是用快速求冪法壓縮時間(快速冪就不貼**了)
typedef long long ll;
ll fast(ll a,ll n) // 快速冪 pow(a,n)
ll inv(ll x, ll mod)
{return fast(x,mod-2);
第四題:
有乙個射擊遊戲
有m種顏色的氣球,顏色分別為1~m
現在乙個人開了n槍,告訴你乙個數列,表示打爆的氣球顏色分別是多少。(注意,0表示這一槍沒有打中,mmp這裡害得我debug了好久)
求乙個最小區間[l,r],在區間內包含了所有1~m顏色。輸出區間長度。
答:這個題是xupt 2019寒假訓練最後一場比賽的原題的強化版。剛好我做了並且在bilibli上給學弟學妹們講了,很奈斯。
用乙個變數維護當前區間裡有多少種顏色,用book陣列表示第i種顏色在當前區間內出現了多少次。
然後尺取。
第五題:(沒做出來)
有n個積木,高度分別為1~n,除了高度和顏色其他形狀都一樣。然後想把他們前後排成一排,你站在正前方看(順序可以隨便排)。現在要看到k次顏色(k-1次顏色變化),且前面的積木可以擋住後面的積木,求有多少種方法。
結果對mod=1e9+9取模,對沒錯,不是1e9+7而是1e9+9。不知道這個是不是質數。
答:不會做,大佬們有會做的請教一下我。
騰訊2019提前批筆試 硬幣題解
演算法描述 牛家村的貨幣是一種很神奇的連續貨幣.他們貨幣的最大面額是n,並且一共有面額為1,面額為2,面額為n,n種面額的貨幣.牛牛每次購買商品都會帶上所有面額的貨幣,支付時會選擇給出數量最小的方案.現在告訴你牛牛將要購買的商品的 你能算出牛牛支付的硬幣數量嗎?第一行兩個整數n,m.表示貨幣的最大面...
騰訊提前批筆試題 2 魔法序列
小q擁有乙個只儲存了整數的序列叫做魔法序列。一開始序列為空,小q會執行以下兩種操作 add x 表示往系列中新增乙個值為x的整數。add陣列表示每次往陣列中新增的數字 get y 表示在第y次add操作後,取出序列中第k小的數,並將其輸出。其中k初始時候為1,每執行一次get操作之後,k的值會 1。...
2019網易提前批筆試題 塔
小易有一些立方體,每個立方體的邊長為1,他用這些立方體搭了一些塔。現在小易定義 這些塔的不穩定值為它們之中最高的塔與最低的塔的高度差。小易想讓這些塔盡量穩定,所以他進行了如下操作 每次從某座塔上取下一塊立方體,並把它放到另一座塔上。注意,小易不會把立方體放到它原本的那座塔上,因為他認為這樣毫無意義。...