省選模擬賽Day7 T3 隨便亂走

2021-08-16 16:51:12 字數 2159 閱讀 1151

題意:

乙個n個點的環,當你在i號點時有pi/2的概率走向(i%n+1)號點,有pi/2的概率走向((i-2+n)%n+1)號點,有(1-pi)的概率永遠停下,動態修改pi,多次詢問從i號點出發走的距離的期望值f(i)。

範圍n<=100000

這個題就是誘導人去想高斯消元的,然後複雜度**。。。。。。

電腦高斯消元會**,那麼我們就用我們的人腦幫電腦消一些元。

不難發現,可以由fi和f(i-1)得到f(i+1)

那麼假設f(1)=x,f(n-1)=y;

線性遞推一下轉一圈回來我們會得到關於x,y的二元一次方程組,

用行列式的公式直接上:

a x + b y = c

d x + e y = f

y=   (af-cd)/ (ae-bd)

x=   (bf-ce)/  (bd-ae)

樓主口胡了乙個口訣:

另一未知量的係數列向量與常數列向量所組成的行列式值除以

另一未知量的係數列向量與本未知量列向量所組成的行列式值(順序從左到右不能改)

好吧這的確不像乙個口訣

然後就是老套路了,線性遞推關係在中途修改常數可以用線段樹維護矩陣區間積。

每次修改後算出f(1),f(n),詢問就用矩陣區間積快速求出其與f(1),f(n)的關係。。。。

accode:

#include#include#include#include#define mod 998244353

#define lc now<<1

#define rc now<<1|1

#define ll long long

#define maxn 100005

using namespace std;

int n,p[maxn];

inline int pow(int base,int k)

struct mat

}a,i;

mat m[maxn*8];

void insert(int now,int l,int r,int pos,mat a)

int mid=(l+r)>>1;

insert(lc,l,mid,pos,a);

insert(rc,mid+1,r,pos,a);

m[now]=m[rc]*m[lc];

}int f[maxn];

inline void solve()

f[n]=(mod-1ll*b[2]*pow(b[1],mod-2)%mod)%mod;

a[2]=(a[2]+1ll*f[n]*a[1]%mod)%mod;

f[1]=(mod-1ll*a[2]*pow(a[0],mod-2)%mod)%mod;

*/ m[1].a[0]--,m[1].b[1]--;m[1].a[2]=-m[1].a[2],m[1].b[2]=-m[1].b[2];

f[n]=(1ll*m[1].a[0]*m[1].b[2]-1ll*m[1].b[0]*m[1].a[2])%mod * pow( (1ll*m[1].a[0]*m[1].b[1]-1ll*m[1].b[0]*m[1].a[1])%mod,mod-2)%mod;

f[1]=(1ll*m[1].a[1]*m[1].b[2]-1ll*m[1].b[1]*m[1].a[2])%mod * pow( (1ll*m[1].a[1]*m[1].b[0]-1ll*m[1].b[1]*m[1].a[0])%mod,mod-2)%mod;

m[1].a[0]++,m[1].b[1]++;m[1].a[2]=-m[1].a[2],m[1].b[2]=-m[1].b[2];

}inline mat query(int now,int l,int r,int ql,int qr)

inline int query(int id)

char ch;

inline void get(int &res)

int main()

solve();

int q,tag;

get(q);

for(;q--;)

else

}}

注:在面對998244353等小模數時將小矩陣的乘法迴圈展開不僅可以優化常數,還可以少模幾次,實測快了500ms+,但且隨疾風前行,身後小心爆零!

a x + b y = c

d x + e y = f

省選模擬賽Day4T3迂迴

problem problem problem problem problem problem problem problem 3 迂迴 tour tour tour tour tour tour 題目描述 題目描述 給定一有向圖,邊長均為 1,求 長度 小於 k的環個數 mod m 保證 有向圖中...

省選模擬賽03 16 T3 超級樹

目錄一棵 k 超級樹 k supertree 可按如下方法得到 取一棵深度為 k 的滿二叉樹,對每個節點向它的所有祖先連邊 如果這條邊不存在的話 例如,下面是乙個 4 超級樹 請統計一棵 k 超級樹 中有多少條不同的簡單有向路徑,對 mod 取模。input 一行兩整數 k,mod。output 一...

snoi省選模擬賽 day3t1 路徑規劃

kac在數軸上有n片西瓜地。第 i片的座標是x i 注意 x並沒有排序 任意兩片西瓜地座標不同。有一天他要給這n片西瓜地澆水。初始他在x 1 的位置。他必須按1.n 的順序澆水,也就是說,必須先去x 1 再去x 2 最後到x n 他可以沿著座標軸正方向或者負方向走 給西瓜地澆水不需要花費時間。每走1...