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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P7887-「MCOI-06」Existence of Truth【构造】

發布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P7887-「MCOI-06」Existence of Truth【构造】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目連接:https://www.luogu.com.cn/problem/P7887?contestId=52021


題目大意

給出三個長度為nnn的序列xi,yi,zix_i,y_i,z_ixi?,yi?,zi?,求一個序列aaa滿足0≤ai<109+70\leq a_i<10^9+70ai?<109+7
xi(∑j=1iaj)+yi(∑j=inaj)≡zi(mod109+7)x_i\left(\sum_{j=1}^ia_j\right)+y_i\left(\sum_{j=i}^na_j\right)\equiv z_i(mod\ 10^9+7)xi?(j=1i?aj?)+yi?(j=in?aj?)zi?(mod?109+7)

如果只有一組解就輸出這組解

1≤∑n≤2×105,1≤xi,yi<109+7,0≤zi<109+71\leq \sum n\leq 2\times 10^5,1\leq x_i,y_i<10^9+7,0\leq z_i<10^9+71n2×105,1xi?,yi?<109+7,0zi?<109+7


解題思路

看到這個同余就感覺這題是個啥方程的做法類的
si=∑j=1iajs_i=\sum_{j=1}^ia_jsi?=j=1i?aj?那么有
xisi+yi(sn?si?1)=zix_is_i+y_i(s_n-s_{i-1})=z_ixi?si?+yi?(sn??si?1?)=zi?
這樣我們就有了si,si?1,sns_i,s_{i-1},s_nsi?,si?1?,sn?之間的關系式,而對于s1s_1s1?我們可以直接得到它和sns_nsn?的關系式
x1s1+y1sn=z1?s1=z1?y1snx1x_1s_1+y_1s_n=z_1\Rightarrow s_1=\frac{z_1-y_1s_n}{x_1}x1?s1?+y1?sn?=z1??s1?=x1?z1??y1?sn??

這樣我們可以設si=Ai+Bisns_i=A_i+B_is_nsi?=Ai?+Bi?sn?,然后用上面的式子化為
si=zi+yisi?1?yisnxis_i=\frac{z_i+y_is_{i-1}-y_is_n}{x_i}si?=xi?zi?+yi?si?1??yi?sn??

推出后面的A,BA,BA,B,最后有
sn=An+Bnsn?sn=An1?Bns_n=A_n+B_ns_n\Rightarrow s_n=\frac{A_n}{1-B_n}sn?=An?+Bn?sn??sn?=1?Bn?An??

當然Bn=1B_n=1Bn?=1時需要判斷AnA_nAn?是否為000來得到解數。


code

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=2e5+10,P=1e9+7; ll T,n,x[N],y[N],z[N],a[N],b[N],s[N]; ll power(ll x,ll b){ll ans=1;x%=P;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans; }; signed main() {scanf("%lld",&T);while(T--){scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld%lld%lld",&x[i],&y[i],&z[i]);ll inv=power(x[1],P-2);a[1]=z[1]*inv%P;b[1]=(P-y[1])*inv%P;for(ll i=2;i<=n;i++){inv=power(x[i],P-2);a[i]=(a[i-1]*y[i]%P+z[i])*inv%P;b[i]=(b[i-1]*y[i]%P-y[i]+P)%P*inv%P;}if(b[n]==1){printf("%lld\n",a[n]?0:P);continue;}s[n]=a[n]*power((1-b[n]+P)%P,P-2)%P;for(ll i=1;i<n;i++)s[i]=(a[i]+b[i]*s[n]%P)%P;puts("1");for(ll i=1;i<=n;i++)printf("%lld ",(s[i]-s[i-1]+P)%P);putchar('\n');} return 0; }

總結

以上是生活随笔為你收集整理的P7887-「MCOI-06」Existence of Truth【构造】的全部內容,希望文章能夠幫你解決所遇到的問題。

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