【基礎排序】CF - 賭場游戲Playing in a Casino

題目描述

在整個太陽系都很有名的賭場 Galaxy Luck 推出了一種新的紙牌游戲。

在這個游戲中,有一副由 nnn 張牌組成的牌堆。每張牌上寫有 mmm 個整數。nnn 位玩家各自從牌堆中獲得一張牌。

然后所有玩家兩兩對局,每一對玩家恰好對局一次。
例如,如果總共有 444 位玩家,那么會進行 666 場對局:

  • 111 位對第 222
  • 111 位對第 333
  • 111 位對第 444
  • 222 位對第 333
  • 222 位對第 444
  • 333 位對第 444

每一場對局都會產生一位獲勝者,獲勝者將從獎池中獲得一定數量的籌碼。
假設第一個玩家的牌為 a1,a2,…,ama_1,a_2,\dots,a_ma1?,a2?,,am?,第二個玩家的牌為 b1,b2,…,bmb_1,b_2,\dots,b_mb1?,b2?,,bm?
那么獲勝者獲得的籌碼數量為:

∣a1?b1∣+∣a2?b2∣+?+∣am?bm∣|a_1 - b_1| + |a_2 - b_2| + \dots + |a_m - b_m| a1??b1?+a2??b2?+?+am??bm?

其中 ∣x∣|x|x 表示 xxx 的絕對值。

為了確定獎池的大小,我們需要計算所有對局中獲勝者總共獲得的籌碼數。 由于牌的數量和玩家數可能非常大,現在請你編寫一個程序完成這個計算。

輸入格式

輸入包含多組測試數據。

第一行輸入一個整數 ttt (1≤t≤1000)(1 \leq t \leq 1000)(1t1000),表示測試數據的組數。

對于每組測試數據:

  • 第一行包含兩個整數 n,mn, mn,m (1≤n?m≤3×105)(1 \leq n \cdot m \leq 3 \times 10^5)(1n?m3×105),分別表示牌的數量和每張牌上的數字個數。
  • 接下來 nnn 行,每行包含 mmm 個整數 ci,jc_{i, j}ci,j? (1≤ci,j≤106)(1 \leq c_{i,j} \leq 10^6)(1ci,j?106),表示第 iii 張牌上的數字。

保證所有測試數據中 n?mn \cdot mn?m 的總和不超過 3×1053 \times 10^53×105

輸出格式

對于每組測試數據,輸出一個整數,表示所有對局中獲勝者獲得的籌碼總數。

樣例輸入

3
3 5
1 4 2 8 5
7 9 2 1 4
3 8 5 3 1
1 4
4 15 1 10
4 3
1 2 3
3 2 1
1 2 1
4 2 7

樣例輸出

50
0
31

說明/提示

樣例 1

三張牌:

  • 玩家 1:[1,4,2,8,5][1,4,2,8,5][1,4,2,8,5]

  • 玩家 2:[7,9,2,1,4][7,9,2,1,4][7,9,2,1,4]

  • 玩家 3:[3,8,5,3,1][3,8,5,3,1][3,8,5,3,1]

  • 玩家 1 對 玩家 2: ∣1?7∣+∣4?9∣+∣2?2∣+∣8?1∣+∣5?4∣=19|1-7|+|4-9|+|2-2|+|8-1|+|5-4|=19∣1?7∣+∣4?9∣+∣2?2∣+∣8?1∣+∣5?4∣=19

  • 玩家 1 對 玩家 3: ∣1?3∣+∣4?8∣+∣2?5∣+∣8?3∣+∣5?1∣=18|1-3|+|4-8|+|2-5|+|8-3|+|5-1|=18∣1?3∣+∣4?8∣+∣2?5∣+∣8?3∣+∣5?1∣=18

  • 玩家 2 對 玩家 3: ∣7?3∣+∣9?8∣+∣2?5∣+∣1?3∣+∣4?1∣=13|7-3|+|9-8|+|2-5|+|1-3|+|4-1|=13∣7?3∣+∣9?8∣+∣2?5∣+∣1?3∣+∣4?1∣=13

總和為 19+18+13=5019+18+13=5019+18+13=50

提交鏈接

Playing in a Casino

思路分析

題目大意

在賭場里有一個游戲:

  • 一共有 nnn 張牌,每張牌上寫有 mmm 個整數。
  • 我們關心的“代價”是:對每一列數字,計算所有數對的差的絕對值之和
  • 最終答案就是所有列的代價總和。

換句話說,如果我們固定一列,里面有數字 {x1,x2,…,xn}\{x_1, x_2, \dots, x_n\}{x1?,x2?,,xn?}
那么這一列的貢獻是:

∑1≤i<j≤n∣xi?xj∣\sum_{1 \leq i < j \leq n} |x_i - x_j| 1i<jn?xi??xj?

我們要求所有列的貢獻總和。

🔎 思路分析

1. 為什么不能直接暴力

  • 每列有 nnn 個數,暴力計算所有數對差值需要 O(n2)O(n^2)O(n2)
  • nnn 可能很大(比如 2×1052 \times 10^52×105),直接計算會超時。

所以必須找到一個更快的公式。

2. 關鍵觀察

考慮一列的數字: {x1,x2,…,xn}\{x_1, x_2, \dots, x_n\}{x1?,x2?,,xn?}

  • 對每一列,記該列為 x1,x2,...,xnx_1, x_2, ..., x_nx1?,x2?,...,xn?

  • 列的絕對差和為: colsum=∑1≤i<j≤n∣xi?xj∣col_{sum} = ∑_{1 ≤ i < j ≤ n} |x_i - x_j|colsum?=1i<jn?xi??xj?

  • 總答案為所有列的 colsumcol_{sum}colsum? 相加。

核心做法:

  1. 先將每一列排序: y1≤y2≤...≤yny_1 ≤ y_2 ≤ ... ≤ y_ny1?y2?...yn?

  2. 只統計每個數作為“較小的那個數”的貢獻: contrib(i)=∑k=i+1n(yk?yi)contrib(i) = ∑_{k=i+1}^{n} (y_k - y_i)contrib(i)=k=i+1n?(yk??yi?)

  3. 每列的答案:colsum=∑i=1ncontrib(i)col_{sum} = ∑_{i=1}^{n} contrib(i)colsum?=i=1n?contrib(i)

這樣每一對 (i,j)(i<j)(i, j)(i<j)(i,j)i<j只被統計一次,不重不漏,排序保證絕對值可以直接用 yk?yiy_k - y_iyk??yi? 代替。

vector< vector<long long> >a(n + 1 , vector<long long>(m + 1));
  • 使用 n+1n+1n+1m+1m+1m+1 來方便下標從 111 開始。

  • a[i][j]a[i][j]a[i][j] 表示第 iii 行第 jjj 列的數字。

for(int j = 1; j <= m; j++)
{vector<long long>temp;long long sum = 0;for(int i = 1; i <= n; i++)  //每一列{temp.push_back(a[i][j]);sum += a[i][j];}sort(temp.begin() , temp.end());....
}
  1. 對每一列收集所有元素到 temptemptemp

  2. 求該列元素的總和 sumsumsum

  3. 排序,為“貢獻法”做準備,使絕對值可以直接用差計算。

long long k = 0;
for(int i = 0; i < n; i++)
{k += temp[i];cost += llabs((sum - k) - (n - i - 1) * temp[i]);
}
  • kkk 用來累加當前列已處理的前 iii 個數的總和。

  • 對于每個位置 iii

    • sum?k=sum - k =sum?k= 右邊所有元素的總和。

    • (n?i?1)?temp[i]=(n - i - 1) * temp[i] =(n?i?1)?temp[i]= 當前元素與右邊元素的貢獻差。

  • llabs(...) 是絕對值函數,累加到 costcostcost

  • 本質:每個數作為較小數時,與右邊每個數的差的和。

參考代碼

#include <bits/stdc++.h>
using namespace std;int main()
{int t , n , m;cin >> t;while(t--){cin >> n >> m;vector< vector<long long> >a(n + 1 , vector<long long>(m + 1));//n張牌  每一張牌有m個數字for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)cin >> a[i][j];long long cost = 0;for(int j = 1; j <= m; j++){vector<long long>temp;long long sum = 0;for(int i = 1; i <= n; i++)  //每一列{temp.push_back(a[i][j]);sum += a[i][j];}sort(temp.begin() , temp.end());long long k = 0;for(int i = 0; i < n; i++){k += temp[i];cost += llabs((sum - k) - (n - i - 1) * temp[i]);}}cout << cost << endl;}return 0;
}

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

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

相關文章

Jenkins啟動端口修改失敗查找日志

# 查看Jenkins服務啟動時的環境變量sudo systemctl show jenkins | grep -i port從systemd服務信息可以看到&#xff0c;Jenkins的環境變量中 JENKINS_PORT8080&#xff0c;這說明systemd服務配置覆蓋了 /etc/default/jenkins 文件中的設置1. 查找Jenkins的systemd服務文件# 查…

Rancher部署的K8S集群服務節點上執行 kubectl 命令

文章目錄1、Rancher UI 和執行 kubectl 命令之間的關系1.1、Rancher 的架構和 kubectl1.2、Rancher 內置 kubectl 的位置1.3、執行權限和安全2、Rancher UI 的使用操作2.1、UI 界面內置的 Kubectl 命令工具2.2、在服務節點執行 kubectl 命令的方法2.3、創建一個集群上下文文件 …

基于Nodejs作為服務端,React作為前端框架,axios作為通訊框架,實現滑塊驗證

文章目錄基于Nodejs作為服務端&#xff0c;React作為前端框架&#xff0c;axios作為通訊框架&#xff0c;實現滑塊驗證1. 為什么要自己寫滑塊驗證2. 滑塊驗證的整體思路3. 具體實現3.1 服務端3.2 前端4. 總結基于Nodejs作為服務端&#xff0c;React作為前端框架&#xff0c;axi…

2025年物流大數據分析的主要趨勢

大數據已為物流行業帶來革命性變革&#xff0c;助力實現更智能的運營與實時洞察。如今&#xff0c;企業可精準識別瓶頸、優化供應鏈&#xff1b;自疫情以來&#xff0c;大數據的采用率大幅攀升&#xff0c;79% 的供應鏈負責人將分析培訓列為優先事項。這一轉變不僅提升了效率、…

【C2000常見問題】JTAG仿真器類型和JTAG Debug定位方法

【C2000常見問題】JTAG仿真器類型和JTAG Debug定位方法 母線繼電保護動作行為仿真分析系統 【C2000常見問題】JTAG仿真器類型和JTAG Debug定位方法 1問題背景 2問題分析 3可能出現的問題 4JTAG問題總結 1問題背景 某客戶產品應用中,使用JTAG仿真器時經常會遇到一啟動負載或者…

LT8712SX,Type-C/DP1.4 /eDP轉 DP1.4/HD-DVI2.0 帶音頻

簡介LT8712SX是一款高性能Type-C/DP1.4 /eDP轉 DP1.4/HD-DVI2.0 帶音頻,支持4K(3840*2316)60Hz 的分辨率,提供 I2S 和 SPDIF 兩個數字音頻輸出接口&#xff0c;均支持 8 通道 LPCM 或壓縮音頻&#xff0c;最高采樣率為 192KHz。應用場景便攜式顯示器例如&#xff0c;手機通過 T…

C語言基礎:(二十)自定義類型:結構體

目錄 前言 一、結構體類型的聲明 1.1 結構體回顧 1.1.1 結構體的聲明 1.1.2 結構體變量的創建和初始化 1.2 結構的特殊聲明 1.3 結構的自引用 二、結構體內存對齊 2.1 對齊規則 2.1.1 練習1 2.1.2 練習2 2.1.3 練習3&#xff1a;結構體嵌套問題 2.2 為什…

數據倉庫分層解析(詳細)

目錄 一、數據倉庫為什么要分層 二、數據倉庫怎么分層 1、ODS&#xff08;Operational Data Store&#xff09;&#xff1a;數據源層 2、DW&#xff08;Data Warehouse&#xff09;&#xff1a; 數據倉庫層 2.1、DWD&#xff08;Data Warehouse Detail&#xff09;&#x…

智慧城管云平臺源碼,微服務vue+element+springboot+uniapp技術架構,數字化綜合執法辦案系統

智慧城管綜合執法系統源碼&#xff0c;包括PC端和移動端。微服務架構&#xff0c;vueelementspringbootuniapp技術框架開發。智慧城管建立了統一的城管執法案件數據庫、法律法規庫、檔案信息庫等&#xff0c;支持簡易程序案件、一般程序案件、行政強制管理等執法業務的辦理&…

VUE實現多個彈窗優先級變化實現思路

在開發復雜的單頁應用&#xff08;SPA&#xff09;時&#xff0c;我們經常會遇到需要管理多個浮動窗口&#xff08;或稱“彈窗”、“面板”&#xff09;的場景。一個核心的用戶體驗要求是&#xff1a;用戶當前操作的窗口應該總是在最頂層。本文將結合代碼示例&#xff0c;總結一…

集成算法和kmeans

一、集成算法&#xff08;Ensemble Learning&#xff09; 1. 基本概念 集成學習通過構建并結合多個學習器&#xff08;基分類器/回歸器&#xff09;來完成學習任務&#xff0c;旨在通過集體決策提升模型性能&#xff0c;類似于“多個專家的綜合判斷優于單個專家”。 2. 結合策略…

圖數據庫性能與可擴展性評估

圖數據庫的性能與可擴展性直接決定業務場景&#xff08;如實時風控、知識圖譜分析&#xff09;的落地效果&#xff0c;需結合業務場景特性&#xff08;OLTP/OLAP&#xff09;、技術指標&#xff08;響應時間、吞吐量&#xff09;和擴展能力&#xff08;數據量/節點擴展&#xf…

樹莓派常用的國內鏡像源列表以及配置方法

1. 常用的鏡像源使用下來發現清華源經常訪問不到&#xff0c;阿里源比較好用。其他源還未測試。源名稱URL清華源https://pypi.tuna.tsinghua.edu.cn/simple阿里云https://mirrors.aliyun.com/pypi/simple/中科大https://pypi.mirrors.ustc.edu.cn/simple/華為云https://repo.hu…

Transformer在文本、圖像和點云數據中的應用——經典工作梳理

摘要 最近在整一些3D檢測和分割的任務&#xff0c;接觸了一下ptv3&#xff0c;在之前梳理的工作owlv2中用到了vit&#xff0c;去年年假閱讀《多模態大模型&#xff1a;算法、應用與微調》&#xff08;劉兆峰&#xff09;時學習了Transformer網絡架構及其在文本數據中的應用&am…

訓練后數據集后部署PaddleOCR轉trt流程

訓練后的模型部署&#xff0c;首先要進行訓練 0.訓練流程見文章 PaddleOCR字符識別&#xff0c;訓練自己的數據集全流程&#xff08;環境、標注、訓練、推理&#xff09;-CSDN博客文章瀏覽閱讀1.6k次&#xff0c;點贊53次&#xff0c;收藏23次。PaddleOCR是基于百度飛槳框架的…

《MLB美職棒》美國國球是橄欖球還是棒球·棒球5號位

USAs National Sport Showdown: MLB?? vs NFL Ultimate Guide!從商業價值到文化基因&#xff0c;360解析美國體育王座之爭&#xff01;添加圖片注釋&#xff0c;不超過 140 字&#xff08;可選&#xff09;? 歷史定位 Historical Roots?? MLB&#xff1a;The "Classi…

常見 Linux 網絡命令梳理

在日常運維和排障工作中&#xff0c;網絡相關命令是最常用的一類工具。無論是檢查網絡連通性&#xff0c;還是定位路由問題&#xff0c;又或是分析端口和服務占用&#xff0c;熟悉這些命令都能讓我們更高效地解決問題。本文將從幾個常見的維度來梳理 Linux 下的網絡命令&#x…

Docker 搭建 Gitlab 實現自動部署Vue項目

1、配置要求: 硬件要求: CPU:雙核或以上 內存:4GB或以上 軟件要求:Centos6 或更高版本 2、gitlab鏡像: # 中文版倉庫 #docker pull twang2218/gitlab-ce-zh docker pull gitlab/gitlab-ce 3、gitlab部署目錄 說明:為了跟其他容器區分,gitlab相關容…

如何解決機器翻譯的“幻覺“問題(Hallucination)?

更多內容請見: 機器翻譯修煉-專欄介紹和目錄 文章目錄 一、數據層面優化 二、模型架構改進 三、訓練策略調整 四、評估與迭代 五、前沿方向與挑戰 六、案例:WMT2023幻覺緩解方案 機器翻譯中的“幻覺”(Hallucination)指模型生成與源文本語義無關、邏輯矛盾或事實錯誤的翻譯…

基于STM32+NBIOT設計的宿舍安防控制系統_264

文章目錄 1.1 項目介紹 【1】開發背景 【2】實現需求 【3】項目硬件模塊組成 【4】設計意義 【5】國內外研究現狀 【6】摘要 1.2 系統總體設計 【1】系統功能需求分析 【2】系統總體方案設計 【3】系統工作原理 1.3 系統框架圖 1.4 系統功能總結 1.5 系統原理圖 1.6 實物圖 1.7…