Diary Ⅴ

Well
Time flies
Here come the last week
Are you ready?
Come on !

2019/11/11

1.考試題【√】
2.週末作業【√】
3.模板練習

今天考試
T1 100pts
T2 100pts
T3 10pts
Total:210pts
最高:260pts

T1 簽到題
T2 組合數學(打表找規律)
但是正解真的很棒啊
設選出來的數從小到大爲a1,a2,a3...,ama1,a2,a3...,am,考慮令𝑏𝑖 = 𝑎𝑖 + 𝑖,我們會發現,b中全是偶數並且兩兩互不相同,一個b唯一對應一個a那麼問題等價於從1到n+m中選擇m個偶數的方案數這個顯然就是從1到⌊n+m2⌋中選m個數

T3 線段樹
emmm……本來也想到了qn的做法,但是沒有處理好。最後直接交了一個qn2logn的,拿了10pts
改了一發暴力
其實不需要像我之前那樣把每個區間取出來,直接在線段樹上做,就可以計算父親對它的影響了

WOJ#4814學園祭的樂隊
一拿到題就jio得這是個dp,結果lsr說我還是太naive了
數據範圍那麼大1e6,怎麼可能是dp
考慮計算每個1的貢獻(也就是有多少的概率會在當前位置停下)
發現最後的染色方案(也就是換弦)一定是一個排列,pip_i表示iipip_i這個位置被換了
相當於就是求有多少個排列
考慮一個排列 p 如果要在第 k 個位置上的 1 結束,那麼 pk ≥ k,且對於之前所有位
置是 1 的位置 i, 要滿足 pi < i,從左到右考慮每一個爲 1 的位置。
設 ai 爲第 i 個 1 的出現位置,在第 k 個 1 處結束的合法的排列的方案數就是(nk)!(nak+1)i=1k1(aii)(n-k)!(n-a_k+1)\prod_{i=1}^{k-1}(a_i-i)

對於最後一個位置,只要能夠走到,就需要計算入答案

WOJ#4814 生與死的境界
哇,好一個貪心!
考慮合併的時候新的貢獻爲x+2yx+2*y,對於前面那個數相當於沒有改變,只是後面那個數對答案的貢獻有變化
一個顯然的貪心,對於正數,我們一開始就把它往前合併(這樣係數肯定更大)。對於負數,我們就放到最後,等前面的都合併完了,再處理它。
由於我們最多合併n次,所以複雜度是沒問題的(一開始把每個數都當做一個獨立的塊,每次合併最多減少一個塊,總共合併n次)
詢問離線處理,整塊直接調用答案,散塊hash計算

最後一週了,我還想做:
NOIP真題做完
模板複習到位
學習自己的博客(既然時間不允許我重做以前的考試題了,那就看看以前的博客)

粗略計劃如下:
週二:複習數論模板+靶形數獨
週三:複習圖論+動態規劃
週四:複習字符串+博客
週五:複習數據結構+博客

2019/11/12

WOJ#1846 靶形數獨
就是想寫搜索

今天考試
T1 40pts
T2 30pts
T3 10pts
Total:80pts
最高:250pts

T1
推了一個小時,沒有想到結論。。
lsr的優秀暴力:
首先肯定可以建一顆trie樹,然後就考慮在這個樹上瞎搞。。思考一下前序遍歷、後序遍歷、中序遍歷,,發現,啊……都不可以。DFS好像可以??爲什麼嘞?因爲DFS遍歷下去,相同的前綴一定是單調不減的。題目限制就滿足咯~
但這樣爲什麼只是暴力呢
顯然Trie樹是開不下1e7的
我們把在Trie樹上的dfs遍歷特殊化,其實按字典序來就可以了
感性理解一下,字典序是比較兩個字符串第一個不同的值的大小(越靠近的兩個數肯定相似度越高)

T2
接近正解了,只是沒有繼續優化二分
(我記得我開了-Wall的啊……一定要用!long long輸出居然用%d???)
希望在小於O(n)的時間內求出每個 t 需要減去的 x 的數量
寫成數學表達形式
Σtilenx\Sigma\lceil{\frac{t_i-len}{x}}\rceil
然後你發現這個東西沒有辦法直接變成 tixlenx\lceil\frac{t_i}{x}\rceil-\lceil\frac{len}{x}\rceil
怎麼辦呢
手玩幾組數據試一下
發現 tixlenx\lceil\frac{t_i}{x}\rceil-\lfloor\frac{len}{x}\rfloor是肯定被包含在答案內的,然後就是一個是否 - 1 的判斷了
需要-1的就是 滿足ti%x(mid+s)%xt_i\%x\le (mid+s)\%x
主席樹搞一下即可(求某個區間內小於等於某個數的個數)

T3 組合計數
比較簡單的一道組合計數。。
結果我入坑dp(明明都知道那是暴力,還沒寫出來??)

BZOJ#1257 餘數之和
發現kmod  i=kkiik\mod i=k-\lfloor\frac{k}{i}\rfloor*i(式子的轉化!)
然後我們所求的東西就可以提做:nkΣi=1nkiin*k-\Sigma_{i=1}^{n}\lfloor\frac{k}{i}\rfloor*i
然後就很好玩了(๑′ᴗ‵๑)
考慮如何快速地求解後半部分
顯然ii在某一區間範圍內時ki\lfloor\frac{k}{i}\rfloor是一個定值
那我們直接根據這個劃分區間(不超過2k2\sqrt k個區間)
區間爲[x,k/(k/x)][x,k/(k/x)]
感性理解一下

BZOJ#1053 反素數
搜索(剪枝不會。。)

慢慢發現
題目給出的式子,大多數情況下都是不可計算的。。
需要自己靠腦子轉化呀( ̄▽ ̄)~*

POJ#3696 The Luckiest Number
好妙啊!
首先x個8連在一起構成的正整數可以表示爲819(10x1)8*\frac{1}{9}*(10^x-1)(適當擴展一下,其實8可以換成任意數字)
現在我們需要求滿足L819(10x1)L|8*\frac{1}{9}*(10^x-1)的最小x
來一波推導
d=gcd(L,8)d=gcd(L,8)
得到:9Ld(10x1)\frac{9L}{d}|(10^x-1)
也就是說10x1(mod9Ld)10^x \equiv 1(mod\frac{9L}{d})
然後根據某種不知名的引理,可以得到
滿足ax1(mod  n)a^x\equiv1(\mod n)的最小正整數x0x_0是φ(n)的約數(證明見算法競賽page 146)
注意判斷一下快速冪的時候直接相乘會不會爆long long(要用快速乘)

2019/11/13

CH3401 石頭遊戲 矩陣快速冪
狀態矩陣一般都是一維的
所以我們將一開始的石頭矩陣,拉成一維的
然後由於每個格子的操作序列是獨立的,但每個長度都不超過6
所以在60次操作後,所有的格子的操作序列都會重置爲原序列
我們就處理出1~60次的轉移矩陣,然後將t=q*60+r

BZOJ#1951 古代豬文
哇,超級大好題(巨經典)
包含了Excrt,Exgcd,Lucas等一系列數論模板操作!
先用歐拉定理對指數取模
然後用中國剩餘定理求解大質數的取模操作

什麼事情都還沒做,,,我還沒開始複習圖論啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!破爛數論!!!!我我我我我我。。。。

現在:
古代豬文。【√】
錯誤總結。【半√】有點水
圖論複習。

2019/11/14

CSP退役前最後一考
T1 100pts
T2 70pts
T3 25pts
Total:195pts
最高:270pts

心態把握還行。主要是部分分給的很足。
雖然11:00才調完T1,但還好穩住了沒有慌。儘量做到了仔細地把暴力敲完,希望CSP的時候也可以穩住(姑娘你可以的!)

T1 最短路
跑10個最短路,然後dfs

T2
注意到了葉子結點數<=10,但仍然不會做
主要是鏈上的情況都不會處理,更不用說將葉子兩兩組合起來變樹爲鏈
對於鏈上的情況,我們考慮增量構造
當前加入的數如果爲u,則u之後的序列一定分爲了若干段,每一段的前綴Gcd相同,而我們至多有Log(n)段(考慮每次gcd的變化最少除以2,最多除以log次)
然後就暴力修改合併即可
至於如何把樹變成鏈,由於葉子結點非常的少,我們直接暴力將每個葉子結點作爲根

T3
好妙的一個dp啊
f[i][j]f[i][j]表示處理了前i個位置,已經分了j個塊的方案數
考慮當前的第i個位置
有兩種入邊,兩種出邊
一共四種情況

WOJ#4133 小C的序列
增量構造,鏈表維護相同的一段gcd

caicai 15928837680
考前開-Wall -Wextra 自動保存

下午改題+WOJ#4133 小 C 的序列
複習圖論

任務:

  1. 次小生成樹【√】
  2. 企鵝棋【√】–>抄std
  3. 觀光公交(ldx太棒啦)

最後的任務:
1.數列分塊2,3【√】
2.線段樹分治【✓】
3.博客複習&字符串的操作&CSP下發文件
4.總結一下

數列分塊2
給出一個長爲 n 的數列,以及 n 個操作,操作涉及區間加法,詢問區間內小於某個值 x 的元素個數。

因爲需要小於某個值x的元素個數,如果塊內的元素是有序的,那不就可以直接二分了嗎~~

數列分塊 3
給出一個長爲 n 的數列,以及 n 個操作,操作涉及區間加法,詢問區間內小於某個值 x 的前驅(比其小的最大元素)。

將分塊2中的二分稍微變一下即可

博客複習:
1.dp
2.圖論
3.Diary

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章