日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AT2164-[AGC006C]Rabbit Exercise【差分,倍增,数学期望】

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AT2164-[AGC006C]Rabbit Exercise【差分,倍增,数学期望】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/AT2164


題目大意

nnn只兔子編號為1~n1\sim n1n,第iii只在坐標軸xix_ixi?處。然后mmm次跳躍,每次給出aia_iai?,編號為aia_iai?的兔子會等概率的選取ai?1a_{i-1}ai?1?ai+1a_{i+1}ai+1?跳躍到對稱位置。進行kkk輪,求最后每只兔子的期望位置。

3≤n≤105,1≤m≤105,1≤k≤10183\leq n\leq 10^5,1\leq m\leq 10^5,1\leq k\leq 10^{18}3n105,1m105,1k1018


解題思路

fif_ifi?表示iii的期望位置的話,對于每次跳躍兔子xxx,它的概率就是
fx=(2fx?1?fx)+(2fx+1?fx)2=fx?1+fx+1?fxf_x=\frac{(2f_{x-1}-f_{x})+(2f_{x+1}-f_x)}{2}=f_{x-1}+f_{x+1}-f_{x}fx?=2(2fx?1??fx?)+(2fx+1??fx?)?=fx?1?+fx+1??fx?
然后這個見到這個式子就直接差分成gi=fi?fi?1g_i=f_i-f_{i-1}gi?=fi??fi?1?

然后上面那個東西就變成了交換iiii+1i+1i+1

然后就是給一個交換,交換kkk次,因為kkk很大倍增搞就好了。

時間復雜度O(nlog?k)O(n\log k)O(nlogk)


code

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=1e5+10; ll n,m,k,d[N],ans[N],t[N]; double x[N]; signed main() {scanf("%lld",&n);for(ll i=1;i<=n;i++){scanf("%lf",&x[i]);d[i]=ans[i]=i;}scanf("%lld%lld",&m,&k);for(ll i=1;i<=m;i++){ll x;scanf("%lld",&x);swap(d[x],d[x+1]);}while(k){if(k&1){for(ll i=1;i<=n;i++)t[i]=ans[d[i]];for(ll i=1;i<=n;i++)ans[i]=t[i];}for(ll i=1;i<=n;i++)t[i]=d[d[i]];for(ll i=1;i<=n;i++)d[i]=t[i];k>>=1;}double sum=0;for(ll i=1;i<=n;i++){sum+=x[ans[i]]-x[ans[i]-1];printf("%.1lf\n",sum);}return 0; }

總結

以上是生活随笔為你收集整理的AT2164-[AGC006C]Rabbit Exercise【差分,倍增,数学期望】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。