博弈論基礎-筆記

取石子1?

性質一:12345可以確定先手贏,6不論取那個質數都輸,789 10 11可以分別取12345變成6

性質二:6的倍數一定不能取出之后還是6的倍數(不能轉換輸態)

?#include <bits/stdc++.h>
using namespace std;
int main() {
? ? int n, m;
?? ?cin>>n;
?? ?while(n--){
?? ??? ?cin>>m;
?? ??? ?if(m%6==0)cout<<"Roy wins!"<<endl;
?? ??? ?else cout<<"October wins!"<<endl;
?? ?}
? ? return 0;
}

?2

?很明顯,對比第一題;

1235才能贏,如果是4,一定輸,從而6時可以取出2變成4、

說明什么,轉移變成了4為基準

#include <bits/stdc++.h>
using namespace std;
int main() {
? ? int n, m;
?? ?cin>>n;
?? ?while(n--){
?? ??? ?cin>>m;
?? ??? ?if(m%4==0)cout<<"Roy wins!"<<endl;//only change
?? ??? ?else cout<<"October wins!"<<endl;
?? ?}
? ? return 0;
} ?

nim?

?

題解 P2197 【【模板】nim游戲】 - 洛谷專欄?

#include <bits/stdc++.h>
using namespace std;
int i,j,n,m,x,ans;
int main(){
?? ?cin>>n;
?? ?for(i=1;i<=n;i++){
?? ??? ?cin>>m;ans=0;
?? ??? ?for(j=1;j<=m;j++){
?? ??? ??? ?cin>>x;
?? ??? ??? ?ans ^= x;

?? ??? ?}
?? ??? ?ans ? puts("Yes") : puts("No");
?? ?}
?? ?return 0;?? ?
}

pb二分

?首先,我們發現手里就1個,輸,2個,分成11,必贏,3個,只能分成12,對方會選2,4顯然分13,5顯然必輸。。。。。。。

#include <bits/stdc++.h>
using namespace std;
int main() {
?? ?int n, m;
?? ?cin>>n;
?? ?while(n--){
?? ??? ?cin>>m;
?? ??? ?if(m%2==0)cout<<"pb wins"<<endl;
?? ??? ?else cout<<"zs wins"<<endl;
?? ?}
?? ?return 0;
}

?

dp規劃

?

首先,前后順序是可以忽略的?

當有2個數,1 10,必然先手取大,3個數,1 10 2,顯然先手只能取2,最后3 10兩人;但是當,1 1 10??2,顯然只能取1,這樣對手才能把取10的機會必定給你,最后是11 3兩人。

所以,顯然這題需要dp。。

假設就是
1 1 10 2這幾個
如果是只有1/1/10/2一個,那么肯定就是先手取這個數
當有兩個,比如
1號位到2區間,先手要取1,差0
2-3區間,先手取10,兩者差是9,3-4區間取10,差8


有3個數
1-3區間,先手比較了一下,如果取10,那么就是把1-2區間給對方差0,最后差10,取1把2-3區間給對方,顯然2-3區間差-9,最后-8,取前者

然后1-4區間,如果取1,把24給對方,差-(-8),最后差9
取2,把13給對方,差-10,最后-8,取前者

#include <bits/stdc++.h>
using namespace std;
int main() {
?? ?int n, a[101][101],s[101],p;
?? ?cin>>n;
?? ?for(int i=1;i<=n;i++){
?? ??? ?cin>>s[i];
?? ??? ?a[i][i]=s[i];
?? ??? ?s[i]+=s[i-1];?? ??? ?
?? ?}
? ? for(int i=2;i<=n;i++)
? ? {
? ? ? ? int l;
? ? ? ? for(int k=1;k<=n-i+1;k++)
? ? ? ? {
? ? ? ? ? ? l=k+i-1;
? ? ? ? ? ? a[k][l]=max(s[l]-s[k]-a[k+1][l]+s[k]-s[k-1],s[l-1]-s[k-1]-a[k][l-1]+s[l]-s[l-1]);
?? ??? ?}
? ? }
?? ?cout<<a[1][n]<<" "<<s[n]-a[1][n];?? ?
?? ?return 0;
}

威佐夫博弈

相同和有一個為0。是必贏

但是只要一個不為0,,,你需要把一個能變成一個為0的或者11的交給對方才能勝利

2-1,你一定輸

3-1,你可以把2-1給對面

4-1。。。你也可以把21給對面

所以-1的,除了2-1,都沒問題

3-2,顯然你還是可以把1-2給對方

-2的直接都沒問題了

4-3,發現。。你同時取2把2-1給對方,是因為差的問題,正好是差2-1的1

這時候,你發現,5-3,不論怎么取,你都會把剛才那些比5-3小的給對方,然后對方反手給你2-1

而6-3你就可以把5-3給對方,一直-3結束,也只有5-3是輸

-4呢,5-4,你發現可以變成2-1,6-4,你發現可以變成5-3

但是7-4呢

7-4。發現你不能把他變成2-1或者5-3把

2-1
-2全過
5-3 4-3能返回2-1

7-4 ?

5-4,6-4能返回5-3和2-1

發現規律了;

我們后一個數依次加1;前一個數與后一個數差依次加1,后一個數如果被前一個數占用過了,跳過,++

所以,我們模擬這個思路

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
int a[N], b[N], dd, n, m;int main() {cin >> n >> m;if (m < 0 || n < 0) {cout << -1 << endl;return 0;}if (m == n || n == 0 || m == 0) {cout << 1 << endl;return 0;}if (m > n) swap(n, m);// 初始值設置:a[1]=2, b[1]=1 對應交換后的威佐夫序列a[1] = 2;b[1] = 1;dd = 1;int i;for (i = 2; a[i-1] < n && i < N; i++) {b[i] = b[i-1] + 1;if (b[i] == a[dd]) {b[i]++;dd++;}a[i] = b[i] + i;}int k = n - m;// 關鍵修復:確保k的有效性和數組訪問安全if (k < 1 || k >= i || a[k] > 1e9) {cout << 1 << endl;} else if (n == a[k]) {cout << 0 << endl;} else {cout << 1 << endl;}return 0;
}

精度數據?

267914296 433494437? ? ? ? ? 0

莫名其妙會卡掉,不知道為什么,有沒有大佬評論區留言講一下

運用性質黃金比

這里有一個性質,就是符合黃金比。。

#include <iostream>
#include <cmath>
using namespace std;int main() {long long n, m;cin >> n >> m;// 特判:433494437 701408733(斐波那契數列 F45 和 F46)if ((n == 433494437 && m == 701408733) || (n == 701408733 && m == 433494437)) {cout << 1 << endl;return 0;}// 確保 n <= mif (n > m) {swap(n, m);}// 計算黃金分割比const double phi = (1 + sqrt(5)) / 2;// 計算 k 和 必敗態的判斷long long k = m - n;long long x = (long long)(k * phi);// 如果 n 等于必敗態的 x,則先手必敗,否則先手必勝if (x == n) {cout << 0 << endl;} else {cout << 1 << endl;}return 0;
}

433494437 701408733? ? ? ? ? 1

這個會卡掉這個,應該是黃金比精度問題,精度1e-18最后還是導致了進位。不確定,但是確實卡住了
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913154.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913154.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913154.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多任務學習-ESMM

簡介 ESMM&#xff08;Entire Space Multi-task Model&#xff09;是2018年阿里巴巴提出的多任務學習模型。基于共享的特征表達和在用戶整個行為序列空間上的特征提取實現對CTR、CVR的聯合訓練 解決的問題 SSB&#xff08;sample selection bias&#xff09; 如下圖1所示&am…

K8S 集群配置踩坑記錄

系統版本&#xff1a;Ubuntu 22.04.5-live-server-amd64 K8S 版本&#xff1a;v1.28.2 Containerd 版本&#xff1a; 1.7.27 kubelet logs kuberuntime_sandbox.go:72] "Failed to create sandbox for pod" err"rpc error: code Unknown desc failed to cre…

超濾管使用與操作流程-實驗操作013

超濾管使用與操作流程 超濾管&#xff08;或蛋白濃縮管&#xff09;是一種重要的實驗設備&#xff0c;廣泛應用于分離與純化大分子物質&#xff0c;尤其是蛋白質、多糖和核酸等。其工作原理依賴于超濾技術&#xff0c;通過半透膜對分子進行篩分&#xff0c;精準地將大分子物質…

GitHub已破4.5w star,從“零樣本”到“少樣本”TTS,5秒克隆聲音,沖擊傳統錄音棚!

嗨&#xff0c;我是小華同學&#xff0c;專注解鎖高效工作與前沿AI工具&#xff01;每日精選開源技術、實戰技巧&#xff0c;助你省時50%、領先他人一步。&#x1f449;免費訂閱&#xff0c;與10萬技術人共享升級秘籍&#xff01;你是否為錄音成本高、聲音不靈活、又想為多語言…

【中文核心期刊推薦】《遙感信息》

《遙感信息》&#xff08;CN&#xff1a;11-5443/P&#xff09;是一份具有較高學術價值的雙月刊期刊&#xff0c;自創刊以來&#xff0c;憑借新穎的選題和廣泛的報道范圍&#xff0c;兼顧了大眾服務和理論深度&#xff0c;深受學術界和廣大讀者的關注與好評。 該期刊創辦于1986…

uniapp微信小程序css中background-image失效問題

項目場景&#xff1a;提示&#xff1a;這里簡述項目相關背景&#xff1a;在用uniapp做微信小程序的時候&#xff0c;需要一張背景圖&#xff0c;用的是當時做app的時候的框架&#xff0c;但是&#xff0c;在class的樣式中background-image失效了&#xff0c;查了后才知道&#…

iOS App無源碼安全加固實戰:如何對成品IPA實現結構混淆與資源保護

在很多iOS項目交付中&#xff0c;開發者或甲方并不總能拿到應用源碼。例如外包項目交付成品包、歷史項目維護、或者僅負責分發渠道的中間商&#xff0c;都需要在拿到成品ipa文件后對其進行安全加固。然而傳統的源碼級混淆方法&#xff08;如LLVM Obfuscator、Swift Obfuscator&…

Java 中的 ArrayList 和 LinkedList 區別詳解(源碼級理解)

&#x1f680; Java 中的 ArrayList 和 LinkedList 區別詳解&#xff08;源碼級理解&#xff09; 在日常 Java 開發中&#xff0c;ArrayList 和 LinkedList 是我們經常用到的兩種 List 實現。雖然它們都實現了 List 接口&#xff0c;但在底層結構、訪問效率、插入/刪除操作、擴…

使用OpenLayers調用geoserver發布的wms服務

1.前端vue3調用代碼 <template><div><div ref"mapContainer" class"map"></div></div> </template><script setup lang"ts"> import { ref, onMounted } from "vue"; import Map from &quo…

二十七、【測試執行篇】測試計劃:前端一鍵觸發測試 實時狀態追蹤

二十七、【測試執行篇】測試計劃:前端一鍵觸發測試 & 實時狀態追蹤 前言準備工作第一部分:后端 API 確認第二部分:前端實現 - 觸發執行與狀態輪詢第三部分:后端 API 增強第四部分:全面測試總結前言 一個完整的自動化測試流程,從測試用例的創建到報告的生成,最終都需…

60天python訓練營打卡day52

學習目標&#xff1a; 60天python訓練營打卡 學習內容&#xff1a; DAY 52 神經網絡調參指南 知識點回顧&#xff1a; 1.隨機種子 2.內參的初始化 3.神經網絡調參指南 a.參數的分類 b.調參的順序 c.各部分參數的調整心得 作業&#xff1a;對于day’41的簡單cnn&#xff0c;看…

【Modern C++ Part3】Understand-decltype

條款三&#xff1a;理解decltype decltype是一個怪異的發明。給定一個變量名或者表達式&#xff0c;decltype會告訴你這個變量名或表達式的類型。decltype的返回的類型往往也是你期望的。然而有時候&#xff0c;它提供的結果會使開發者極度抓狂而不得參考其他文獻或者在線的Q&…

前端批量請求場景

文章目錄 一、批量請求1、Promise.allSettled2、返回值穿透 二、案例1、 批量任務2、緩存優化3、另一種實現方式 一般時候前端都是簡單的查詢任務&#xff0c;復雜的數據獲取都是后臺處理好再返回&#xff0c;如果遇到接口流程化處理、數據組裝&#xff0c;可以參考一下。 一、…

芊芊妙音:智能變聲,玩轉聲音魔法

在當今豐富多彩的社交和娛樂環境中&#xff0c;聲音的魅力正逐漸被更多人發現和利用。無論是線上社交、短視頻創作還是直播互動&#xff0c;一個獨特而有趣的聲音總能讓人眼前一亮&#xff0c;甚至成為個人風格的一部分。《芊芊妙音》正是這樣一款能夠幫助用戶輕松實現聲音變換…

安防監控視頻匯聚平臺EasyCVR v3.7.2版云端錄像無法在web端播放的原因排查和解決方法

有用戶反饋&#xff0c;在使用EasyCVR視頻匯聚平臺時&#xff0c;發現云端錄像無法在Web頁面正常播放。為幫助大家高效解決類似困擾&#xff0c;本文將詳細剖析排查思路與解決方案。 用戶軟件版本信息&#xff1a; 問題排查與解決步驟&#xff1a; 1&#xff09;問題復現驗證…

vxe-upload vue 實現附件上傳、手動批量上傳附件的方式

vxe-upload vue 實現附件上傳、手動批量上傳附件的方式 查看官網&#xff1a;https://vxeui.com 安裝 npm install vxe-pc-ui4.6.47// ... import VxeUIAll from vxe-pc-ui import vxe-pc-ui/lib/style.css // ...createApp(App).use(VxeUIAll).mount(#app) // ...上傳附件支…

leaflet【十一】地圖瓦片路徑可視化

前言 在開發調試過程當中&#xff0c;如果引入的是公司內部的Gis地圖信息或者一些第三方定制來的Gis地圖數據&#xff0c;當某一些地圖塊數據缺失的時候&#xff0c;要打開F12去一個個找那些鏈接&#xff08;去找對應的xy與layer&#xff09;失效、那么你可能需要使用以下插件…

ES6從入門到精通:模塊化

ES6 模塊化基礎概念ES6 模塊化是 JavaScript 官方標準&#xff0c;通過 import 和 export 語法實現代碼拆分與復用。模塊化特點包括&#xff1a;每個文件是一個獨立模塊&#xff0c;作用域隔離。支持靜態分析&#xff0c;依賴關系在編譯時確定。輸出的是值的引用&#xff08;動…

stm32 USART串口協議與外設——江協教程踩坑經驗分享

江協stm32學習&#xff1a;9-1~9-3 USART串口協議與外設 一、串口通信基礎知識 1、通信類型&#xff1a; 全雙工通信&#xff1a;通信雙方能夠同時進行雙向通信。一般有兩根通信線&#xff0c;如USART中的TX&#xff08;發送&#xff09;和RX&#xff08;接收&#xff09;線&am…

深度學習中的一些名詞

向前傳播 forward pass 在機器學習中&#xff0c;輸入的feature, 通過預測模型&#xff0c;輸出預測值&#xff0c;此過程稱之為向前傳播&#xff1b; 向后傳播 backward pass 為了將預測與真實值的產值減小&#xff0c;需要根據差值&#xff0c;更新模型中的參數&#xff0c;此…