shoi的題目***高啊,感覺都是些不錯的題目……(我都不會做)題意:給定乙個序列,在模
p 意義下,茲瓷區間對給出的乙個常數
c取冪(原來是ai
,變成ca
i ),以及區間求和的操作,注意
p 不一定是質數,ai
,c≤p
≤108分析:一看到模意義,我們馬上想到指數迴圈節,由於am
≡am%
φ(p)
+φ(p
)(modp),
m≥φ(
p)我們會發現,這個定理大致意思就是說,找另乙個
n ,使得n≡
m(modφ(p
))那麼進一步的,再套幾層下去,就會相當於模φ(
φ(p)
),φ(
φ(φ(
p)))
,⋯很明顯o(
logn
) 次之後就有
m<
模數,就是不用修改了
然後和區間取模就很類似了,利用線段樹維護暴力修改和區間求和,每次暴力修改,如果發現不用修改了(對原來指數的模已經相當於模
1 了),那就不改了,否則暴力遞迴下去修改
直接做是o(
mlog
nlog2p
),因為還有快速冪的複雜度,但是我們會發現我們可以將快速冪分成兩段預處理(就像usaco某道叫牛計數的題目),對
c 預處理,對
c10000
預處理,然後就做完了,複雜度o(
mlog
nlogp)
,這是很有用的技巧!
題意:從nk
個物品裡選模
k 餘
r個物品,問方案數模p
分析:容易看出,如果我們設乙個f(
i,j)
表示模k
意義下前
i個里選餘
j 個物品,那麼很明顯可以有f(
i,j)
=f(i
−1,j
)+f(
i−1,
j−1)
,那麼就可以矩陣乘了
但是還有更快的做法,就是考慮到f(
2n,t
)∑i+
j=tf
(n,i
)×f(
n,j)
就是列舉前一段和後一段選的個數,時間複雜度o(
k2logn)
# include
# include
# define mem(x,v) memset(x,v,sizeof(x))
# define n 1000000000
# define k 50
typedef
long
long ll;
ll p;
int k;
struct mvec
ll &operator(int i)
const ll &operator(int i) const
};inline mvec &operator%=(mvec &a, int k)
return a;
}inline mvec operator*(const mvec &a, const mvec &b)
}res %= k;
return res;
}inline mvec pow(mvec a, ll n)
int main()
題意:平面上給一些點,問最小橢圓覆蓋,其中橢圓長軸和短軸的比是給出的乙個
λ ,同時長軸要求固定在與
x 軸夾
θ角的方向上
分析:這裡轉化的思路還是很茲瓷的……畢竟我們還是會最小圓覆蓋的
考慮將整個圖轉到長軸的方向上,然後將整個圖短軸方向上擴大
λ (防止精度損失),然後就還是乙個最小圓覆蓋辣……
最小圓覆蓋用隨機增量法很好寫……所以是期望o(
n)的題意:給一條射線,每次碰到一條線段
i ,,就會發生反射,反射角
φ與入射角
θ 之間滿足φ=
λiθ ,問前
10 次碰到哪些線段,線段數量不多於
100
分析:這是一道暴力題……直接暴力判斷肯定不會超,而且資料範圍其實可以往上放得多很多的qaq
cf水題記錄
記錄幾道水題 第一題題目鏈結 題目大意 給 n和m 問1 n裡面m的倍數中個位數的和是多少.某場div3的c題.n m肯定是1 n裡面m倍數的個數.那麼這些數裡面各位數的和怎麼算呢?分析一下可以知道最多10個數後就會進入迴圈.因為0 9只有10個數嘛.可以手動先把每個數的迴圈陣列算出來.當然這是最直...
OI刷題記錄
2014 4 18 poj3264 bzoj1699 balanced lineup rmq 2014 4 19 bzoj1012 jsoi2008 最大數maxnumber noi2004 鬱悶的出納員 bzoj3224 tyvj 1728 普通平衡樹 2014 4 20 bzoj1862 105...
面試刷題記錄
寫一段 判斷乙個包括 的表示式是否合法 注意看樣例的合法規則。給定乙個表示式a,請返回乙個bool值,代表它是否合法。測試樣例 a b 5 4 返回 true 測試樣例 a b 5 4 返回 false include vector include iostream using namespace ...