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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

2017 ACM Jordanian Collegiate J.Efficiency Test 动态规划、类倍增

發布時間:2023/12/3 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2017 ACM Jordanian Collegiate J.Efficiency Test 动态规划、类倍增 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

題目鏈接

題解及代碼

#include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 1e5+7; int f[2*N][55],a[2*N],sum[2*N],ans[2*N],pb[2*N]; int T,n,k; #define pr(x) cout<<#x<<":"<<x<<endl /** 題解* 由于最多跳一個環就結束,因此倍長數組就足夠了。* 預處理出f[i][j]表示從i點出發,每次跳j步,最遠能跳到哪里。* 預處理出sum[i]表示數組[1,i]位置中有多少個'#'。* 預處理出pb[i],表示i位置前面距離最近的'#'的位置。* ans數組為存儲最終答案的數組。* 枚舉出發點i,再從大到小枚舉跳躍長度m,很容易得到f[i][m]得到下一個點nxt,* 如果nxt不為0,則表示可以走,為了避免多跳,我們把nxt和pb[i]+1取一個最小值,* 然后ans[i] += ceil((nxt-now)/m);* 并更新now = nxt;* 這樣的話,總的時間復雜度就是O(nk)*/ int main(){freopen("jumps.in","r",stdin);cin>>T;while(T--){cin>>n>>k;memset(f,0,sizeof(f));memset(sum,0,sizeof(sum));memset(a,0,sizeof(a));memset(ans,0,sizeof(ans));for(int i = 1;i <= n;++i){char c;scanf(" %c",&c);if(c == '#') a[i] = 1;sum[i] = sum[i-1] + a[i];}for(int i = n+1;i <= 2*n;++i){a[i] = a[i-n];sum[i] = sum[i-1] + a[i];}sum[2*n+1] = sum[2*n];int pre = 0;for(int i = 1;i <= 2*n;++i){if(a[i]) pre = i;else pb[i] = pre;}for(int i = 2*n;i;--i) for(int m = k;m;--m){if(a[i]) continue;int t = m + i;if(t > 2*n){if(!a[t-2*n] && sum[2*n]-sum[i]+sum[t-2*n] <= 1)f[i][m] = 2*n+1;}else{if(!a[t] && sum[t]-sum[i] <= 1)f[i][m] = max(f[t][m],t);}}for(int i = 1;i <= n;++i){if(a[i]) continue;int it = i;for(int m = k;m;--m){int nxt = f[it][m];if(nxt) {if(nxt > pb[i+n]) nxt = pb[i+n]+1;ans[i] += (nxt-it) / m;if((nxt-it)%m) ans[i]++;it = nxt;}if(it > pb[i+n]) break;}if(it < pb[i+n]) ans[i] = -1;}for(int i = 1;i <= n;++i){if(i != 1) cout<<' ';cout<<ans[i];}cout<<endl;}return 0; }

總結

以上是生活随笔為你收集整理的2017 ACM Jordanian Collegiate J.Efficiency Test 动态规划、类倍增的全部內容,希望文章能夠幫你解決所遇到的問題。

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