min-max容斥學習筆記

最近報了航電的春季賽,在一道題目里面遇到了做法,感覺挺有意思。

在這里插入圖片描述
考慮一個(多重)集合S={ai}S=\{a_i\}S={ai?},有如下的等式成立

min?ai∈S(ai)=∑T?S,T≠?(?1)∣T∣?1max?ai∈T(ai)\min_{a_i\in S}(a_i)=\sum_{T\subseteq S,T\ne \empty}(-1)^{|T|-1}\max_{a_i\in T}(a_i)ai?Smin?(ai?)=T?S,T=??(?1)T?1ai?Tmax?(ai?)

反之亦然,

max?ai∈S(ai)=∑T?S,T≠?(?1)∣T∣?1min?ai∈T(ai)\max_{a_i\in S}(a_i)=\sum_{T\subseteq S,T\ne \empty}(-1)^{|T|-1}\min_{a_i\in T}(a_i)ai?Smax?(ai?)=T?S,T=??(?1)T?1ai?Tmin?(ai?)

這兩個公式還是比較容易理解的,這里只拿第一條式子進行分析。

首先是最小的元素a1a_1a1?,只有T={a1}T=\{a_1\}T={a1?}的時候才有a1a_1a1?的貢獻。

對于其它的元素,假設有kkk個比它小的數,那么這個元素總的貢獻就是∑i=0k(?1)iCki=(1?1)k=0\sum_{i=0}^k(-1)^iC_k^i=(1-1)^k=0i=0k?(?1)iCki?=(1?1)k=0,因此這么容斥下來就會得到最小的數。

回到這一題中,因為有期望,所以這兩個式子不能直接用。但因為期望實際上把全部情況加起來,因此可以直接把兩邊加上期望,即

E(min?ai∈S(ai))=E(∑T?S,T≠?(?1)∣T∣?1max?ai∈T(ai))E(\min_{a_i\in S}(a_i))=E(\sum_{T\subseteq S,T\ne \empty}(-1)^{|T|-1}\max_{a_i\in T}(a_i))E(ai?Smin?(ai?))=E(T?S,T=??(?1)T?1ai?Tmax?(ai?))

在這一題中,集合就是沒有被污染的行和列,而max操作就意味著要把集合行和列全部染上。

考慮一共有xxx個點在選出來的行和列里面,嘗試計算把全部點染完的期望步數。首先,染完第一個點的概率是xn×m\frac{x}{n\times m}n×mx?,因此期望步數為n×mx\frac{n\times m}{x}xn×m?;在此之后,染完第二個點的概率是x?1n×m\frac{x-1}{n\times m}n×mx?1?,因此期望步數為n×mx?1\frac{n\times m}{x-1}x?1n×m?,因此類推,總的貢獻就是∑i=1kn×mi\sum_{i=1}^k\frac{n\times m}{i}i=1k?in×m?

#include <bits/stdc++.h>
#define ll long long
using namespace std;const int N = 1e6 + 10, mod = 998244353;int power(int a, int b) {int ret = 1;while (b) {if (b & 1) ret = 1ll * ret * a % mod;a = 1ll * a * a % mod; b >>= 1;}return ret;
}int n, m, k;
vector<int> a[N];
int f[N];
int fc[N], ifc[N];int C(int a, int b) {return 1ll * fc[a] * ifc[b] % mod * ifc[a - b] % mod;
}void solve() {cin >> n >> m >> k;f[1] = 1;for (int i = 2; i <= n * m; i++) {f[i] = (f[i - 1] + power(i, mod - 2)) % mod;}fc[0] = 1;for (int i = 1; i <= n * m; i++) {fc[i] = 1ll * fc[i - 1] * i % mod;}ifc[n * m] = power(fc[n * m], mod - 2);for (int i = n * m - 1; i >= 0; i--) {ifc[i] = 1ll * ifc[i + 1] * (i + 1) % mod;}for (int i = 1; i <= n; i++) {a[i].clear();a[i].resize(m + 5);}for (int i = 1; i <= k; i++) {int x, y;cin >> x >> y;a[x][y] = 1;}int s1 = 0, s2 = 0;for (int i = 1; i <= n; i++) {bool bk = 1;for (int j = 1; j <= m; j++) {if (a[i][j]) {bk = 0; break;}}if (bk) s1++;}for (int i = 1; i <= m; i++) {bool bk = 1;for (int j = 1; j <= n; j++) {if (a[j][i]) {bk = 0; break;}}if (bk) s2++;}if (!s1 && !s2) {cout << "-1\n";return;}int ans = 0;for (int i = 0; i <= s1; i++) {for (int j = 0; j <= s2; j++) {if (!i && !j) continue;int w = (i + j) % 2 ? 1 : mod - 1;int cnt = i * m + j * n - i * j;int ret = 1ll * n * m * f[cnt] % mod;ret = 1ll * ret * C(s1, i) % mod * C(s2, j) % mod;ret = 1ll * ret * w % mod;ans = (ans + ret) % mod;}}cout << ans << endl;
}int main() {// freopen("in.in", "r", stdin);ios::sync_with_stdio(false);cin.tie(nullptr);int T; cin >> T;while (T--) solve();return 0;
}

下一題是[HAOI2015] 按位或

SSS是每一位的集合

根據前面所說的公式

E(max?(S))=∑T?S,T≠?E(min?(T))E(\max(S))=\sum_{T\subseteq S,T\ne \empty}E(\min(T)) E(max(S))=T?S,T=??E(min(T))

也就是要枚舉每一個子集,求出其第一個出現期望有多久。

我們只需要用高維前綴和算出選擇一次不包括TTT的概率ppp,那么E(min?(T))=11?pE(\min(T))=\frac{1}{1-p}E(min(T))=1?p1?,然后就可以求出E(max?(S))E(\max(S))E(max(S))了。

#include <bits/stdc++.h>
#define ll long long
using namespace std;const int N = (1 << 20) + 10;
const double eps = 1e-9;int n; double f[N], g[N];int main() {// freopen("in.in", "r", stdin);ios::sync_with_stdio(false);cin.tie(nullptr);cin >> n;for (int i = 0; i < (1 << n); i++) {cin >> f[i];g[i] = f[i];}for (int j = 0; j < n; j++) {bool flag = 0;for (int i = 0; i < (1 << n); i++) {if (i >> j & 1) {if (f[i] > eps) {flag = 1; break;}}}if (!flag) {cout << "INF\n";return 0;}}for (int j = 0; j < n; j++) {for (int i = 0; i < (1 << n); i++) {if (i >> j & 1) {g[i] += g[i - (1 << j)];}}}double ans = 0;for (int i = 1; i < (1 << n); i++) {double w = -1;for (int j = 0; j < n; j++) {if (i >> j & 1) w = -w;}int mask = ((1 << n) - 1) ^ i;double t = 1.0 / (1.0 - g[mask]);ans += w * t;}cout << fixed << setprecision(8) << ans << endl;
}

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

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

相關文章

使用帆軟制作項目

https://zhuanlan.zhihu.com/p/23429318335 項目背景 為加快大數據體系建設&#xff0c;穩步推進數字化轉型戰略&#xff0c;規范數據架構體系和數據治理體系&#xff0c;運用大數據推進全行數字化轉型建設&#xff0c;為業務發展提供創新動力&#xff0c;目標是利用金融科技和…

論C/C++的條件編譯#if、#ifdef、#ifndef、#undef

我們以實例來演示&#xff1a; ------------------------------------------實驗①------------------------------------------ 子函數&#xff1a;主函數&#xff1a;當定義了COMMENT_FLAG該宏&#xff0c;且其為0&#xff0c;則運行結果如下&#xff1a;只執行了sub_func_1函…

21、鴻蒙Harmony Next開發:組件導航(Navigation)

目錄 設置頁面顯示模式 設置標題欄模式 設置菜單欄 設置工具欄 路由操作 頁面跳轉 頁面返回 頁面替換 頁面刪除 移動頁面 參數獲取 路由攔截 單例跳轉 子頁面 頁面顯示類型 頁面生命周期 頁面監聽和查詢 頁面轉場 關閉轉場 自定義轉場 共享元素轉場 跨包…

“外賣大戰”正在改變國內“大零售”

出品 | 何璽排版 | 葉媛7月18日&#xff0c;市場監管總局約談美團、餓了么、京東三家外賣平臺&#xff0c;要求“理性競爭、規范促銷”&#xff0c;劍指近期愈演愈烈的“0元購”“0.1秒殺”等外賣補貼亂象。但約談之后&#xff0c;平臺們是真整改&#xff0c;還是玩話術&#x…

當CAN握手EtherCAT:視覺檢測系統的“雙芯合璧”時代來了

在汽車制造的高速生產線上&#xff0c;設備間的“語言不通”曾是工程師們的頭疼事&#xff1a;CAN總線像踏實的老司機&#xff0c;穩扎穩打傳輸傳感器數據&#xff1b;而EtherCAT網關則是追求極致速度的“閃電俠”&#xff0c;主導著實時控制的重任。當視覺檢測系統需要同時對接…

【C語言】動態內存管理全解析:malloc、calloc、realloc與free的正確使用

C語言學習 動態內存分配 友情鏈接&#xff1a;C語言專欄 文章目錄C語言學習前言&#xff1a;一、為什么要有動態內存分配二、malloc和free2.1 malloc2.2 free三、calloc和realloc3.1 calloc3.2 realloc總結附錄上文鏈接下文鏈接專欄前言&#xff1a; 在C語言編程中&#xff0…

基于Arduino智能家居環境監測系統—以光照強度檢測修改

2 相關技術與理論 2.1 Arduino 技術 Arduino 是一款廣受歡迎的開源電子原型平臺&#xff0c;由硬件和軟件組成&#xff0c;為開發者提供了便捷且低成本的解決方案&#xff0c;尤其適用于快速搭建交互式電子項目&#xff0c;在本智能家居環境監測系統中擔當核心角色。? 硬件方…

前端上傳 pdf 文件 ,前端自己解析出來 生成界面 然后支持編輯

要在前端解析 PDF 文件并生成可編輯界面&#xff0c;我們可以使用 PDF.js 庫來解析 PDF 內容&#xff0c;然后將其轉換為可編輯的 HTML 元素。 主要特點和工作原理如下&#xff1a; PDF 解析&#xff1a; 使用 Mozilla 的 PDF.js 庫解析 PDF 文件內容&#xff0c;提取文本信息。…

Linux“一切皆文件“設計哲學 與 Linux文件抽象層:struct file與file_operations的架構解析

在Linux系統中&#xff0c;“一切皆文件”&#xff08;Everything is a file&#xff09;是一個核心設計哲學&#xff0c;它抽象了系統資源的訪問方式&#xff0c;使得幾乎所有硬件設備、進程、網絡連接等都可以通過統一的文件接口&#xff08;如open()、read()、write()、clos…

藍橋杯零基礎到獲獎-第3章 C++ 變量和常量

藍橋杯零基礎到獲獎-第3章 C 變量和常量 文章目錄一、變量和常量1.變量的創建2.變量初始化3.變量的分類4.常量4.1 字?常量4.2 #define定義常量4.3 const 定義常量4.4 練習練習1&#xff1a;買票https://www.nowcoder.com/practice/0ad8f1c0d7b84c6d8c560298f91d5e66練習2&…

物理AI是什么技術?

當英偉達CEO黃仁勛在鏈博會上明確提出“物理AI將是AI的下一浪潮”時&#xff0c;這個看似陌生的概念瞬間引發了科技圈的廣泛關注。究竟什么是物理AI&#xff1f;它與我們熟悉的人工智能有何不同&#xff1f;又將如何重塑我們與物理世界的交互方式&#xff1f; 物理AI&#xff1…

GRIB數據處理相關指令

GRIB 數據格式簡介 GRIB(General Regularly distributed Information in Binary form)&#xff0c;是由世界氣象組織&#xff08;WMO&#xff09;設計和維護的一種用于存儲和傳輸網格數據的標準數據格式&#xff0c;它是一種自描述的二進制壓縮格式&#xff0c;通常具有擴展名…

微服務學習(六)之分布式事務

微服務學習&#xff08;六&#xff09;之分布式事務一、認識Seata二、部署TC服務1、準備數據庫表2、準備配置文件3、docker部署三、微服務集成seata1、引入依賴2、改造配置3、添加數據庫表4、測試四、XA模式1、兩階段提交2、seata的XA模型3、優缺點4、實現步驟五、AT模式1、Sea…

Go實現用戶登錄小程序

寫一個用戶登錄注冊的小程序 運行程序&#xff0c;給出提示1. 注冊輸入用戶名、密碼、年齡、性別 {"用戶名": "root", "passwd": "123456", "age": 18, "sex": "男"}注冊前要判斷是否存在此用戶2. 登錄…

鴻蒙藍牙通信

https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-bluetooth-low-energy 藍牙權限 module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.ACCESS_BLUETOOTH","reason": "…

Java:Map

文章目錄Map常用方法Map遍歷的三種方法先獲取Map集合的全部鍵&#xff0c;再通過遍歷來找值Entry對象forEach結合lambda表達式Map 案例分析需求我的代碼&#xff08;不好&#xff09;老師的代碼&#xff08;好&#xff09;好在哪里另外集合分為Collection和MapMap常用方法 代碼…

fastjson2 下劃線字段轉駝峰對象

在對接第三方或查詢數據庫時&#xff0c;返回的字段是下劃線分隔的&#xff0c;而在業務中需要轉成java對象&#xff0c;java對象的字段是駝峰的&#xff0c;使用fastjson2時&#xff0c;有兩種方法可以實現&#xff1a; 比如數據格式是&#xff1a; {"item_id": &q…

【硬件】藍牙音頻協議

1. 無線音頻傳輸的工作原理 在無線傳輸的過程中&#xff0c;音源設備首先將MP3、FLAC等音頻文件還原為PCM格式。通過藍牙音頻編碼轉為藍牙無線傳輸的文件&#xff0c;發送到音頻設備段。將藍牙無線傳輸的文件再次還原為PCM格式&#xff0c;之后轉為模擬信號并放大&#xff0c;通…

【宇樹科技:未來1-3年,機器人可流水線打螺絲】

在第三屆中國國際供應鏈促進博覽會上&#xff0c;宇樹科技工作人員表示&#xff0c;未來1到3年內&#xff0c;機器人產品有望從單一工業化產品&#xff0c;發展至復合化工業場景&#xff0c;如機器人搬完箱子后&#xff0c;換個 “手” 就能在流水線上打螺絲。在3到10年內&…

Spring AI 1.0版本 + 千問大模型之 文本記憶對話

上篇文章&#xff0c;主要是簡單講解了一下文本對話的功能。由于模型不具備上下文記憶功能&#xff0c;只能一問一答。因此我們需要實現記憶對話功能&#xff0c;這樣大模型回答信息才能夠更加準確。 1、pom依賴 項目構建就不詳細說了&#xff0c;大家可以參考上篇 文本對話 文…