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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

SRM 583 DIV1

發布時間:2025/5/22 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SRM 583 DIV1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A

  裸最短路.

  

1 class TravelOnMars { 2 public: 3 int minTimes(vector <int>, int, int); 4 }; 5 vector<int> e[maxn]; 6 int n; 7 8 int dist(int a,int b) { 9 if (a>b) swap(a,b); 10 int res = min( b-a , a+n-b); 11 return res; 12 } 13 int d[maxn],inq[maxn]; 14 queue<int> q; 15 int bfs(int s,int t) { 16 for (int i=0 ; i<n ; i++ ) d[i] = 1000; 17 d[s] = 0; 18 inq[s] = true; 19 q.push(s); 20 while (!q.empty()) { 21 int cur = q.front(); q.pop(); 22 printf("d[%d]:%d\n",cur,d[cur]); 23 inq[cur] = false; 24 for (int i=0 ; i<(int)e[cur].size() ; i++ ) { 25 int v = e[cur][i]; 26 if (d[v]>d[cur]+1) { 27 d[v] = d[cur]+1; 28 if (!inq[v]) { 29 inq[v] = true; 30 q.push(v); 31 } 32 } 33 } 34 } 35 return d[t]; 36 } 37 int TravelOnMars::minTimes(vector <int> range, int startCity, int endCity) { 38 n = range.size(); 39 printf("n=%d\n",n); 40 for (int i=0 ; i<n ; i++ ) { 41 for (int j=0 ; j<n ; j++ ) if (dist(i,j)<=range[i]) { 42 e[i].push_back(j); 43 } 44 } 45 int ans = bfs(startCity,endCity); 46 return ans; 47 } View Code

?

B

  f(u,s)表示以u為根子樹的答案 , s=1表示有從u祖先下來的路徑 , s=0表示沒有.

  f(u,s) 可以通過一個dp得到 :

  dp[i][size]表示現在考慮第u的i個孩子,當前已經向下連了size條邊時的最小代價 , 答案就是min(dp[ cntson ] [ size ] ),

  然后需要加一些強制轉移.

  

1 #include <vector> 2 #include <list> 3 #include <map> 4 #include <set> 5 #include <deque> 6 #include <stack> 7 #include <bitset> 8 #include <algorithm> 9 #include <functional> 10 #include <numeric> 11 #include <utility> 12 #include <sstream> 13 #include <iostream> 14 #include <iomanip> 15 #include <cstdio> 16 #include <cmath> 17 #include <cstdlib> 18 #include <ctime> 19 #include <cstring> 20 using namespace std; 21 #define maxn 55 22 class TurnOnLamps { 23 public: 24 int minimize(vector <int>, string, string); 25 }; 26 struct edge{ 27 int v,c; 28 }; 29 30 vector<edge> e[maxn]; 31 bool debug; 32 int var[maxn],n,dp[maxn][2],dp2[2][maxn][maxn]; 33 int getvar(int x) { 34 if (x<0) return 0; 35 int res = x/2 + (x&1); 36 if (debug) printf("var:%d = %d\n",x,res); 37 return res; 38 } 39 int better(int a,int b) { 40 if (a==-1) return b; 41 if (b==-1) return a; 42 return min(a,b); 43 } 44 int dfs(int u,int s,int fa) { 45 if (dp[u][s]!=-1) return dp[u][s]; 46 vector<edge> son; 47 for (int i=0 ; i<(int)e[u].size() ; i++ ) { 48 int v = e[u][i].v; 49 if (v==fa) continue; 50 son.push_back(e[u][i]); 51 dfs(v,0,u); 52 dfs(v,1,u); 53 } 54 debug = (u==10); 55 printf("u:%d s:%d debug=%d\n",u,s,debug); 56 for (int i=0 ; i<(int)e[u].size() ; i++ ) if (e[u][i].v != fa) { 57 printf("son:%d c:%d\n",e[u][i].v,e[u][i].c); 58 } 59 // {{0, 1, 0, 2, 0, 1, 1, 2, 4, 6, 10, 10, 11, 10, 9, 9, 10, 15, 7}, "0111100111001010000", "0100001100101000111"} 60 int res = 0; 61 // for (int i=0 ; i<son.size() ; i++ ) printf("%d %d\n",son[i].v,son[i].c); 62 if (son.size()) { 63 if (son[0].c==0) { 64 dp2[s][son[0].v][0] = dp[son[0].v][0]; 65 dp2[s][son[0].v][1] = dp[son[0].v][1] + getvar(1-s); 66 } else if (son[0].c==1) { 67 dp2[s][son[0].v][1] = dp[son[0].v][1] + getvar(1-s); 68 } else if (son[0].c==2) { 69 dp2[s][son[0].v][0] = dp[son[0].v][0]; 70 } 71 for (int i=1 ; i<(int)son.size() ; i++ ) { 72 int lastv = son[i-1].v; 73 int v = son[i].v; 74 int c = son[i].c; 75 for (int j=0 ; j<=i ; j++ ) if (dp2[s][lastv][j] != -1) { 76 if (u==10) printf("dp2[%d][%d][%d]=%d\n",s,lastv,j,dp2[s][lastv][j]); 77 // printf("dp2[%d][%d]=%d\n",lastv,j,dp2[lastv][j]); 78 if (c == 0) { 79 int tmp; 80 tmp = better(dp2[s][v][j] , dp2[s][lastv][j]+dp[v][0]); 81 // if (u==10) printf("update: dp2[%d][%d][%d] from %d to %d\n",s,v,j,dp2[s][v][j],tmp); 82 dp2[s][v][j] = tmp; 83 tmp = better(dp2[s][v][j+1] , dp2[s][lastv][j]-getvar(j-s)+dp[v][1]+getvar(j+1-s)); 84 // if (u==10) printf("update: dp2[%d][%d][%d] from %d to %d\n",s,v,j+1,dp2[s][v][j+1],tmp); 85 dp2[s][v][j+1] = tmp; 86 } else if (c == 1) { 87 int tmp = better(dp2[s][v][j+1] , dp2[s][lastv][j]-getvar(j-s)+dp[v][1]+getvar(j+1-s)); 88 // if (u==10) printf("update: dp2[%d][%d][%d] from %d to %d\n",s,v,j+1,dp2[s][v][j+1],tmp); 89 dp2[s][v][j+1] = tmp; 90 } else if (c == 2) { 91 int tmp = dp2[s][v][j] = better(dp2[s][v][j] , dp2[s][lastv][j]+dp[v][0]); 92 // if (u==10) printf("update: dp2[%d][%d][%d] from %d to %d\n",s,v,j,dp2[s][v][j],tmp); 93 dp2[s][v][j] = tmp; 94 } 95 } 96 } 97 int smlcost = -1; 98 int v = son[son.size()-1].v; 99 for (int i=0 ; i<=(int)son.size() ; i++ ) 100 if (dp2[s][v][i]!=-1) { 101 smlcost = better(smlcost , dp2[s][v][i]); 102 } 103 // if (smlcost != -1) res = smlcost; 104 res = smlcost; 105 } 106 printf("dp[%d][%d]=%d\n",u,s,res); 107 return dp[u][s] = res; 108 } 109 int TurnOnLamps::minimize(vector <int> roads, string init, string imp) { 110 n = roads.size()+1; 111 for (int i=0 ; i<n-1 ; i++ ) { 112 e[i+1].push_back((edge){roads[i],imp[i]=='1'?imp[i]-'0'+init[i]-'0':0}); 113 e[roads[i]].push_back((edge){i+1,imp[i]=='1'?imp[i]-'0'+init[i]-'0':0}); 114 } 115 memset(dp,-1,sizeof(dp)); 116 memset(dp2,-1,sizeof(dp2)); 117 int ans = dfs(0,0,-1); 118 return ans; 119 } View Code


C

  概率題好費腦筋啊。。

  模擬樣例算不對 , 后來發現是少算了轉移到自己的情況 , 然后就不會做了: 考慮每次能轉移到自己的情況會出現無數步 , 怎么計算期望就成了問題;

  題解在這個問題上處理地很巧妙 :

  (1) 從期望的公式出發,推導得到了一個簡單的形式 : sum ( 第i步沒有完成的概率 ) (0<=i <INF);

  (2) 可以用容斥來計算第i步沒有完成的概率;

  (3) 將容斥的公式變形 , 得到一系列的收斂的無窮級數 , 于是解決了i有無窮多的問題;

  最后就得到了一個簡單的統計模型: 對于給定的值x , 求有多少個元素個數為奇數的集合sum為x , 和有多少個個數為偶數的集合sum為x , 求他們的差,遞推即可.

1 #define maxn 2000 2 class RandomPaintingOnABoard { 3 public: 4 double expectedSteps(vector <string>); 5 }; 6 int cnt[maxn],sum[maxn],n,m,f[30][maxn],tot; 7 double RandomPaintingOnABoard::expectedSteps(vector <string> prob) { 8 n = prob.size(); 9 m = prob[0].size(); 10 vector<string> tmp; 11 if (m>n) { 12 for (int i=0 ; i<m ; i++ ) { 13 string s = ""; 14 for (int j=0 ; j<n ; j++ ) s += prob[j][i]; 15 tmp.push_back(s); 16 } 17 prob = tmp; 18 swap (n,m); 19 for (int i=0 ; i<n ; i++ ) cout<<prob[i]<<endl; 20 } 21 double ans = 0; 22 printf("n:%d m:%d\n",n,m); 23 for (int i=0 ; i<n ; i++ ) for (int j=0 ; j<m ; j++ ) tot += prob[i][j]-'0'; 24 for (int i=0 ; i<(1<<m) ; i++ ) { 25 26 // for (int j=0 ; j<n ; j++ ) sum[j] = 0; 27 // for (int j=0 ; j<n ; j++ ) for (int k=0 ; k<=tot ; k++ ) f[j][k] = 0; 28 memset(sum,0,sizeof(sum)); 29 memset(f,0,sizeof(f)); 30 31 for (int j=0 ; j<n ; j++ ) for (int k=0 ; k<m ; k++ ) if (((i>>k)&1)==0) { 32 sum[j] += prob[j][k]-'0'; 33 } 34 f[0][0] = -1; 35 for (int j=0 ; j<m ; j++ ) if ((i>>j)&1) f[0][0] *= -1; 36 for (int j=0 ; j<n ; j++ ) for (int k=0 ; k<=tot ; k++ ) { 37 f[j+1][k] -= f[j][k]; 38 if (k+sum[j]<=tot) f[j+1][k+sum[j]] += f[j][k]; 39 } 40 for (int j=0 ; j<tot ; j++ ) cnt[j] += f[n][j]; 41 } 42 for (int i=0 ; i<tot ; i++ ) { 43 ans += (double)cnt[i] * ((double)tot/(double)(tot-i)); 44 } 45 return ans; 46 } 47 48 49 //Powered by [KawigiEdit] 2.0! View Code

(http://apps.topcoder.com/wiki/display/tc/SRM+583)

轉載于:https://www.cnblogs.com/eggeek/p/3544234.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的SRM 583 DIV1的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本久久99 | 亚洲午夜精品视频 | 九九九九九伊人 | www.久久av| 欧美日韩午夜爽爽 | 国产伦子伦对白视频 | 天天操天天射天天爽 | 久久久www成人免费无遮挡大片 | 久久久久久影视 | 国产精品成人免费精品自在线观看 | 一区二三区 | 精品国产高清在线观看 | 久久久一二三 | 91精品视频在线看 | 四虎婷婷| 成人深夜在线观看 | 瑟瑟视频在线看 | 成人激情在线观看 | 日本精品久久久久久 | 中文字幕播放 | 青青伊人网 | 日本一二三视频 | 国内精品小视频 | 国产精品亚洲自拍 | 成人夜晚视频 | 欧美精品在线视频 | 欧美人与性囗牲恔配 | 欧美日本高清视频 | 精品乱码一区二区三四区视频 | 久久精品日| 五月天精品在线 | 脱美女衣服亲摸揉视频 | 深爱婷婷网 | 亚洲无限看 | 日韩精品乱码久久久久久 | 午夜操操| 男生女生羞羞网站 | 日韩欧美在线一区二区 | 国产91精品在线观看 | 亚洲欧美变态另类丝袜第一区 | 操碰在线观看 | 99精品影视| 永久免费的网站入口 | 夜夜骑天天干 | 少妇被粗大猛进进出出s小说 | 99色99 | 激情九九 | 免费人成在线观看视频播放 | 69福利社区| 91色九色| 好吊色视频一区二区 | 日本女人性视频 | 日韩免费三级 | 久久久久久国产精品一区 | 97国产精品人人爽人人做 | 日韩欧美中文字幕在线播放 | 欧美日韩一区精品 | 麻豆黄色片 | 超碰在线个人 | 免费久久久久 | 国语精品久久 | 91精品色 | 国产一二三在线 | 大肉大捧一进一出好爽视频动漫 | 久久国产香蕉 | 国产精品 欧美激情 | 男女男网站 | 欧美日韩在线视频免费播放 | a毛片成人| 国产欧美在线观看不卡 | av中文字幕免费观看 | 夜夜艹天天干 | 亚洲色图综合网 | www.色黄| 日本xxxx18| 我的邻居在线观看 | www.久久色| 欧美日韩一区二区区 | 欧美亚洲综合一区 | 99久久久无码国产精品免费蜜柚 | 伦av综合一区| 午夜精品久久久 | av网址观看 | 婷婷精品进入 | 日韩三级在线免费观看 | av资源新版在线天堂 | 成人三级晚上看 | 国产精品成人一区 | 亚洲精品国产无码 | 青青草综合视频 | 国产1区2区3区 | 黄色一级小视频 | 美女扒开大腿让男人桶 | 日本一级理论片在线大全 | 亚洲欧美日韩精品永久在线 | 日韩精品一区二区在线观看 | 91人人草 | 中文字幕在线视频免费播放 | 黄色小视频在线观看 |