Codeforces Round #305 (Div. 1) A.B.C 解題報告
A. Mike and Frog
枚舉。
先是找循環,然後很容易得出一個兩元一次方程,然後可以發現解也是有循環節的,所以最小的那個肯定出現在一定范圍內,否則就後面也不可能出現。假設兩個變量為x,y,系數分別為z1,z2。很顯然,兩者的最小公倍數便是一個周期,所以如果枚舉x的話,只需要枚舉到z2就可以了。
細節比較多。。錯了好多次。。比賽中也跪了。。
代碼如下:
#include
#include
#include
#include
#include
#include
#include
B. Mike and Feet
單調棧(或者線段樹)
這題的大體思路很容易,就是找出每個數作為最小值的向左向右延伸的最大范圍,那麼這個范圍之內的都有可能會以這個最小值作為最大值,於是用標記法標記前綴的最大值就可以了。
然後就是找延伸的范圍了。弱只想到了萬能的離散化+線段樹的思路。也不算很麻煩,但是復雜度略高。還有一個更簡單的方法是單調棧的思路。不止復雜度低,只有O(n),代碼復雜度也低。用單調棧來保證棧內始終是遞增的,所以棧底就是延伸的最大范圍。在這裡只貼個線段樹的思路的,也是弱比賽的時候寫的。
話說比賽的時候因為定義了兩個n。。調試了將近一個小時。。。時間全浪費在這上面了。。。。
代碼如下:
#include
#include
#include
#include
#include
#include
#include
C. Mike and Foam
狀壓+容斥
這題只要想清楚一點就很簡單了。。。就是5*10^5范圍內的任意一個數的質因子的個數都不會超過6個。。只要想到了這點,就很簡單了,狀壓一下再容斥一下亂搞搞就解決了。
代碼如下:
#include
#include
#include
#include
#include
#include
#include