NOIP2018模擬9.8
阿新 • • 發佈:2018-09-10
集中 最大匹配 思路 沒有 數字 失誤 語句 當前 不定方程
第二場模擬。
20+50+50
第一題失誤:
1、不定方程沒有判無解情況。
2、10^14級別的兩個數相乘沒有註意到會爆long long。
第二題打的是暴力,考完之後冷靜下來發現正解,思路不夠開闊吧。
第三題思路錯誤,打了一個錯誤的方法,奈何數據垃圾,居然沒有爆零。
T1
題目大意:
給出a,b,c三個正整數,求ax+by=c的非負數解的個數。
題解:
用拓展歐幾裏得求不定方程的最小解就可以了。
T2
題目大意:
給出變量a,c,k,m,n
執行以下語句:
z=[(z*a+c)/k]%mo
if (z<m/2) return 0;else return 1;
執行n次得到一個01串。
現在給出目標01串,求[0,m]內可行的z的個數。
題解:
暴力是O(n*m)的,我們考慮優化。
我們發現復雜度主要集中在模擬執行語句上。
發現如果知道當前的z是什麽,接下來生成的01串是固定的,這顯然是可以預處理的。
預處理的方法的倍增。
設數組f[i][j],表示數i在執行了2^j次語句後得到的數字。
快速比對是否吻合目標串,用哈希。
維護數組g[i][j],表示數i執行了2^j次語句之後輸出的01串的哈希值。
用倍增數組維護暴力跳的過程即可。
T3
題目大意:
給出一個DAG,一個點可以選擇當且僅當它所有可以到達的點均沒有被選,求最多選擇的點數。
題解:
求最大獨立集。
最大獨立集=最小鏈覆蓋。
最小鏈覆蓋=點數-最大匹配。
首先我們Floyd處理每個點的可達點。
DAG轉二分圖,假設有一條x-->y的邊,x拆成x1和x2,y拆成y1和y2,x1向y2連邊就行了。
至於為什麽答案就是點數減去最大匹配,簡單說明以下。
考慮匹配的意義,每次匹配成功說明某兩條邊變成一條了,所以這是對的哦!
NOIP2018模擬9.8