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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

处女座和小姐姐(二)

發布時間:2024/10/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 处女座和小姐姐(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://ac.nowcoder.com/acm/contest/329/F

題解:

std

本題分為兩個子問題。

1. 求一個數組連續p個數mod P的乘積

把序列按照長度m分成若干段,計算每段內的前綴和后綴乘積。
這樣任意劃窗位置的答案可以看成前一段的后綴和后一段的乘積拼出。
時間復雜度?(???+??1)

2. 找出長度為k的符合條件的鏈的個數

使用dfs進行搜索,復雜度〖400?3〗^20顯然會超時,因此使用枚舉起點然后雙向dfs的方法,一次往兩邊進行搜索,從而把復雜度降低到400?〖2?3〗^10,可以使用狀壓等方式記錄狀態。

#include <map> #include <cmath> #include <cstdio> #include <ctime> #include <string> #include <vector> #include <cstring> #include <cstdlib> #include <utility> #include <iostream> #include <algorithm> #define LL long long #define pi acos(-1) #define sqr(a) ((a)*(a))using namespace std;int n,k,m,p; LL a[1000505],b[1000505],ans,X,Y,Z,P,curans; int mapp[25][25]; int tmp[1048576]; int fx[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; void dfs(int nowx,int nowy,int cnt,int res,int tot,bool flag) {if (cnt==tot){if (!flag)tmp[res>>1]++;if (flag)ans+=tmp[(((1<<(k+1))-1)^res)>>1];return;}for (int i=0;i<4;i++){int nextx=nowx+fx[i][0],nexty=nowy+fx[i][1];if (res&(1<<mapp[nextx][nexty])) continue;dfs(nextx,nexty,cnt+1,res|(1<<mapp[nextx][nexty]),tot,flag);} } int main() {int i,j;scanf("%d%d%d%lld%d",&n,&m,&p,&P,&k);scanf("%lld%lld%lld%lld",&a[0],&X,&Y,&Z);//printf("%lld %lld %lld %lld\n",a[0],X,Y,Z);for (i=1;i<=n*m+p-1;i++) a[i]=(a[i-1]*a[i-1]%P*X%P+a[i-1]*Y%P+Z)%P;//for (i=1;i<=n*m+p-1;i++) printf("%lld ",a[i]);//printf("\n");j=0;int cnt=0;for (i=p;i<=n*m+p-1;i++){ans=ans*a[i]%P;if (i-p+1>j){ans=1;j=i;b[i]=a[i];for (int t=i-1;t>=i-p+1;t--) b[t]=b[t+1]*a[t]%P;}tmp[++cnt]=(LL)b[i-p+1]*ans%P;}int cur=0;for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){mapp[i][j]=tmp[++cur]%k+1;//printf("%d%c",mapp[i][j],j==m?'\n':' ');}ans=0;for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){memset(tmp,0,sizeof(tmp));//tmp[0]=1;dfs(i,j,1,1|(1<<mapp[i][j]),k/2,false);dfs(i,j,1,1,k/2+k%2+1,true);}if (n==1&&m==1) ans=1;printf("%lld\n",ans);return 0; }

?

總結

以上是生活随笔為你收集整理的处女座和小姐姐(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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