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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

CCPC-Wannafly Comet OJ 夏季欢乐赛(2019) 飞行棋

發布時間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CCPC-Wannafly Comet OJ 夏季欢乐赛(2019) 飞行棋 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?https://www.cometoj.com/contest/59/problem/E?problem_id=2714

思路:高斯消元求dp[1]~dp[k-1];然后利用遞推式矩陣快速冪求出dp[d];

?

?

#include <iostream> #include <cstring> #include <queue> #include <vector> #include <algorithm> #include <cstdio> //#include<bits/stdc++.h> using namespace std;#define sfi(i) scanf("%d",&i) #define sfs(i) scanf("%s",(i)) #define pri(i) printf("%d\n",i) #define sff(i) scanf("%lf",&i) #define ll long long #define ull unsigned long long #define mem(x,y) memset(x,y,sizeof(x)) #define INF 0x3f3f3f3f #define eps 1e-10 #define PI acos(-1.0) #define lowbit(x) ((x)&(-x)) #define zero(x) (((x)>0?(x):-(x))<eps) #define fl() printf("flag\n") #define MOD(x) ((x%mod)+mod)%mod #define endl '\n' #define pb push_back #define FAST_IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)//--------------------------------------------------------- #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/hash_policy.hpp> #include <ext/pb_ds/priority_queue.hpp> using namespace __gnu_pbds;//gp_hash_table<string,int>mp2; //__gnu_pbds::priority_queue<int>q;//因為放置和std重復,故需要帶上命名空間 //__gnu_pbds::priority_queue<int,greater<int>,pairing_heap_tag> pq;//最快 //----------------------------------------------------------/* //---------------------------------------------------------- const int BufferSize = 1 << 16; char buffer[BufferSize], *head, *tail; inline char Getchar() {if (head == tail) {int l = fread(buffer, 1, BufferSize, stdin);tail = (head = buffer) + l;}return *head++;} inline ll read() {ll x = 0, f = 1;char c = Getchar();for (;!isdigit(c);c = Getchar()) if (c == '-') f = -1;for (;isdigit(c);c = Getchar()) x = x * 10 + c - '0';return x * f;} //---------------------------------------------------------- */const int maxn=2e6+9; const ll mod=1e9+7;ll power(ll x,ll n) {ll ans=1;while(n){if(n&1) ans=ans*x%mod;n>>=1;x=x*x%mod;}return ans; }ll n,d,k;struct M {ll a[23][23];void init(){mem(a,0);}void Base(){init();for(int i=0;i<=23;i++) a[i][i]=1;} };M Mmul(M x,M y) {M res;res.init();int n=k+1;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){for(int k=1;k<=n;k++){res.a[i][j]=res.a[i][j]+(x.a[i][k]*y.a[k][j])%mod;res.a[i][j]%=mod;}}}return res; }M Mpower(M x,ll n) {M res;res.Base();while(n){if(n&1) res=Mmul(res,x);x=Mmul(x,x);n>>=1;}return res; }ll A[110][110],x[110]; void Guass(ll n,ll m,ll A[][110])//有n個未知數,m個方程 {ll i=1,j=1,k,r,c;while(i<=m && j<=n)//正在處理第i個方程,解第j個未知數{r=i;//找到絕對值最大的系數,防止除數為0的情況,使得其他方程組系數不會變得太大for(k=i+1;k<=m;k++)if(A[k][j]>A[r][j])r=k;if(A[r][j]>0)//出現為0的情況,說明此項已經被消掉了,直接用進行下一個未知數,而方程不變,不過這個時候,一般來說跳過的這個元素就沒有固定解啦{for(c=1;c<=n+1;c++)swap(A[i][c],A[r][c]);//交換for(k=i+1;k<=m;k++)if(A[k][j]>0){ll f=A[k][j]*power(A[i][j],mod-2)%mod;for(c=j;c<=n+1;c++)//當前方程j前面的系數都是0A[k][c]=(A[k][c]-f*A[i][c]%mod+mod)%mod;}i++;//獲取下一個方程}j++;//去消下一個未知數}for(ll i=n;i>=1;i--){for(j=i+1;j<=n;j++)A[i][n+1]=(A[i][n+1]-A[i][j]*x[j]%mod+mod)%mod;x[i]=A[i][n+1]*power(A[i][i],mod-2)%mod;//cout<<i<<" "<<x[i]<<endl;} }int main() {//FAST_IO;//freopen("input.txt","r",stdin);cin>>d>>k;ll kk=power(k,mod-2);n=k-1;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i+j<=k){if(j<i){A[i][j]=MOD(2*kk);}else if(j>i){A[i][j]=kk;}else A[i][j]=MOD(kk-1);}else{if(j<i){A[i][j]=kk;}else if(j>i){A[i][j]=0;}else A[i][j]=MOD(-1);}}A[i][n+1]=MOD(-1);}/*for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<<A[i][j]<<" ";}cout<<endl;}*/Guass(n,n,A);M ans;ans.Base();M tmp;tmp.init();for(int i=1;i<=k;i++) tmp.a[1][i]=kk;tmp.a[1][k+1]=1;for(int i=2;i<=k;i++){tmp.a[i][i-1]=1;}tmp.a[k+1][k+1]=1;ans=Mpower(tmp,d-k+1);//fl();M xx;xx.init();for(int i=1;i<=k;i++){xx.a[i][1]=x[i];}xx.a[k+1][1]=1;ans=Mmul(ans,xx);cout<<ans.a[1][1]<<endl;return 0; }

?

總結

以上是生活随笔為你收集整理的CCPC-Wannafly Comet OJ 夏季欢乐赛(2019) 飞行棋的全部內容,希望文章能夠幫你解決所遇到的問題。

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