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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CodeForces 786A Berzerk 博弈?BFS瞎搞

發(fā)布時(shí)間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces 786A Berzerk 博弈?BFS瞎搞 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ans[i][j]

i號(hào)選手在位置j行動(dòng)的結(jié)果。

預(yù)處理,將每位選手能夠直接到達(dá)黑洞的點(diǎn)

ans[1][(n-a[1][i]+n) % n] = -1; 表示必贏的點(diǎn)
把這些點(diǎn)加入到隊(duì)列,作為BFS的起點(diǎn)
對于必贏點(diǎn),敵人能夠到達(dá)必贏點(diǎn)的點(diǎn)標(biāo)記ans[敵人][能到該點(diǎn)(必贏)的點(diǎn)]++;
當(dāng)修改后ans[選手][點(diǎn)]==step_num[本選手] 表示能到的點(diǎn)都是敵人的必贏點(diǎn),那么本點(diǎn)必輸,加入隊(duì)列。
對于必輸點(diǎn),敵人能夠到達(dá)必輸點(diǎn)的點(diǎn)是必贏點(diǎn),如果沒被加入到隊(duì)列,那么敵人必贏點(diǎn)加入隊(duì)列,標(biāo)記為-1;

結(jié)果輸出:
==-1必贏
==step_num[本選手] 必輸
其余l(xiāng)oop

1 #include <cstdio> 2 #include <cmath> 3 #include <iostream> 4 #include <cstring> 5 #include <cmath> 6 #include <queue> 7 using namespace std; 8 int a[3][11111]; 9 int ans[3][11111]; 10 struct dd 11 { 12 int id; 13 int b; 14 }; 15 queue <dd> Q; 16 int main() 17 { 18 int n; 19 int s[3]; 20 dd D; 21 cin >> n; 22 cin >> s[0]; 23 24 for (int i = 1; i <= s[0]; i++) 25 scanf("%d", & a[0][i]); 26 cin >> s[1]; 27 for (int i = 1; i <= s[1]; i++) 28 scanf("%d", & a[1][i]); 29 30 memset(ans, 0, sizeof(ans)); 31 for (int i = 1; i <= s[0]; i++) 32 { 33 ans[0][(n - a[0][i] + n) % n] = -1; 34 D.b = 0; 35 D.id = (n - a[0][i] + n) % n; 36 Q.push(D); 37 } 38 for (int i = 1; i <= s[1]; i++) 39 { 40 ans[1][(n - a[1][i] + n) % n] = -1; 41 D.b = 1; 42 D.id = (n - a[1][i] + n) % n; 43 Q.push(D); 44 } 45 while (!Q.empty()) 46 { 47 D = Q.front(); 48 Q.pop(); 49 int b = D.b; 50 int id = D.id; 51 if (ans[b][id] == -1) 52 { 53 for (int i = 1; i <= s[!b] ; i++) 54 { 55 int from = (id - a[!b][i] + n) % n; 56 57 if ((ans[!b][from] != -1) && ans[!b][from] != s[!b]) 58 { 59 ans[!b][from]++; 60 if (ans[!b][from] == s[!b]) 61 { 62 D.b = !b; 63 D.id = from; 64 Q.push(D); 65 } 66 } 67 68 } 69 } 70 else 71 { 72 for (int i = 1; i <= s[!b] ; i++) 73 { 74 int from = (id - a[!b][i] + n) % n; 75 if ((ans[!b][from] != -1) && ans[!b][from] != s[!b]) 76 { 77 D.b = !b; 78 D.id = from; 79 ans[!b][from] = -1; 80 Q.push(D); 81 } 82 } 83 } 84 } 85 for (int i = 1; i < n - 1; i++) 86 if (ans[0][i] == -1) cout << "Win" << " "; 87 else if (ans[0][i] == s[0]) cout << "Lose" << " "; 88 else cout << "Loop" << " "; 89 if (ans[0][n - 1] == -1) cout << "Win" << endl; 90 else if (ans[0][n - 1] == s[0]) cout << "Lose" << endl; 91 else cout << "Loop" << endl; 92 for (int i = 1; i < n - 1; i++) 93 if (ans[1][i] == -1) cout << "Win" << " "; 94 else if (ans[1][i] == s[1]) cout << "Lose" << " "; 95 else cout << "Loop" << " "; 96 if (ans[1][n - 1] == -1) cout << "Win" << endl; 97 else if (ans[1][n - 1] == s[1]) cout << "Lose" << endl; 98 else cout << "Loop" << endl; 99 100 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/HITLJR/p/6613061.html

總結(jié)

以上是生活随笔為你收集整理的CodeForces 786A Berzerk 博弈?BFS瞎搞的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。