原创 HDU 2865 Birthday Toy(ploya好題)

對於這種顏色多的,但是限制簡單的情況,可以利用dp推出公式,然後矩陣快速冪求解 代碼: #include <cstdio> #include <cstring> #include <algorithm> using namespace s

原创 HDU 1176 免費餡餅(DP)

很顯然的DP。。dp[i][j], i秒位置在j的最大接餅數 代碼: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; cons

原创 SGU 108 (空間優化)

這題本來覺得是道沒什麼的水題,結果沒想到空間卡得這麼死 於是注意觀察式子,發現每個推到後面最多加7 * 9 (7位數,每位是9) 於是就只要開64的空間,利用滾動數組去優化即可 另外還要注意,答案表全打出來也是會MLE的,只能根據輸入的k

原创 SGU 109 Magic of David Copperfield II(構造)

這題UVA上做過類似題,不過這一題又多了一個條件,就是步數只能在n到300之間 那怎麼辦呢。 其實多一個構造就可以了,一開始走n步,把右下角整塊移除掉,那剩下n條對角線,那最多就只用到299步就可以啦 代碼: #include <cstd

原创 ZOJ 3871 Convex Hull(計數)

一個n邊形的面積,可以三角剖分成n 個每個邊和原點構成的三角形的有向面積 這樣每條邊等於一個有向面積,那麼問題轉化成只要求每條邊能作爲幾個凸包的邊 那麼枚舉一點O,這樣對於任意一點X會有一條OX的邊,而這條邊構成凸包的數量,顯然就是隻能在

原创 HDU 3929 Big Coefficients(容斥+證明)

(1 + x)^n 的奇數項係數個數等於 2^(bitcount(n)),bitcount(x)爲x有多少個1. 然後容斥 枚舉每一項存在不存在,然後容斥加加減減即可 這題用二進制枚舉會T,只能DFS 代碼: #include <cstd

原创 編程之美2015資格賽

A:處理下日期,容斥加減一下 B:DP,dp[l][r]表示區間迴文子序列個數 C:模擬退火過了,然後還有個比較科學的方法,就是枚舉B點,XY軸分開考慮,三分求解 代碼: #include <cstdio> #include <cstri

原创 福州大學第十二屆程序設計競賽題解

A:這題利用單調棧,先預處理出每個位置向下的最遠位置,那麼每一行單獨考慮,每行就相當於一些段的子矩陣個數,利用單調棧維護,每次出棧的時候把大於當前要入棧(高度0的不入棧了)的段的部分計算出來,累加一下答案即可 B:這題可以枚舉,因爲一個1

原创 SGU 103 Traffic Lights(最短路)

這題不錯,是一個最短路,但是中間有一個限制條件,就是等待時間 首先先看一下爲什麼仍然滿足最短路 因爲最短路肯定是每個結點求出最早到達的時間,那麼其實不管有沒等待,從隊頭取出去轉移的肯定是最早的時間,仍然滿足轉移 那麼就是等待時間如何去計算

原创 SPOJ 7001 Visible Lattice Points(莫比烏斯反演)

莫比烏斯反演,注意0的情況特殊考慮下就可以了 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 10

原创 SGU 119 Magic Pairs(數論)

做這題的時候真的是腦子短路了,記錄一下。 首先已知一個解了,由於有mod n這個東西,所以剩下的解肯定爲已知解的x倍mod n,於是在a和b上進行操作就可以了,循環節爲n / gcd(n, a),那麼a和b的循環節都求出來,他們的lcm就

原创 HDU 1695 GCD(容斥 or 莫比烏斯反演)

這題可以用容斥做,然而效率並不高。。 於是學了下莫比烏斯反演(資料百度找) 求出mo數組後 設f(x)爲gcd爲x的種數 F(x)爲gcd爲x倍數的種數 那麼顯然F(x) = (b / x) * (d / x) 莫比烏斯反演之後,得到f(

原创 SGU 101 Domino(歐拉路徑)

0-6作爲結點,那麼每個骨牌相當於一條無向邊了 建圖,進行歐拉路徑判斷, 然後dfs找出路徑打印即可 代碼: #include <cstdio> #include <cstring> #include <vector> using na

原创 賽碼"BestCoder"杯中國大學生程序設計冠軍賽

今天終於有時間補題了。。06神數論沒補。 01:貪心的思路,掃3遍,儘量找右區間小的 02:這裏用的是kuangbin神的黑科技,並查集,把一個點拆成一個奇數點和偶數點,每次連邊就奇數邊和偶數邊連,如果出現一個點自己的奇數和偶數點在一個集

原创 ZOJ 3556 How Many Sets I (容斥)

這題是個容斥。 總情況有2^(nk)中,但是其中包含了1個重複元素,2個,3個。。 用容斥,1個重複元素加上,2個減去,3個加上 這樣推出公式爲 C(n, 0)2^(nk) - C(n, 1)2^((n -1)k) + C(n, 2)2^