牛客刷題 — 【排序】[NOIP2012] 國王的游戲(高精度結構體排序)

1.題面:傳送門

2. 思路:

相鄰的兩個大臣的先后順序只會互相影響,并不會影響其他人的金幣數。

假設前 i-1 個人左手上的數乘積為 s 。

① 若 A 大臣排在B 大臣的前面,則:

s
A_{l}A_{r}
B_{l}B_{r}

此時的金幣數最大值為?ans_{1} = max(\frac{s}{Ar}, \frac{s*A_{l}}{B_{r}})

② 若B大臣排在A大臣的前面,則:

s
B_{l}B_{r}
A_{l}A_{r}

此時的金幣數最大值為?ans_{2} = max(\frac{s}{B_{r}}, \frac{s*B_{l}}{A_{r}})

因為每個大臣兩個手上的整數a,b>=1,所以有?\frac{s}{A_{r}} \leq \frac{s*B_{l}}{A_{r}}, \frac{s}{B_{r}} \leq \frac{s*A_{l}}{B_{r}}

① 若要讓ans_{1} \leq ans_{2},即max(\frac{s}{Ar}, \frac{s*A_{l}}{B_{r}}) \leq max(\frac{s}{B_{r}}, \frac{s*B_{l}}{A_{r}}),則還需要滿足:\frac{s*A_{l}}{B_{r}} \leq \frac{s*B_{l}}{A_{r}},化簡得到:A_{l}*A_{r} \leq B_{l}*B_{r}

② 若要讓ans_{2} \leq ans_{1},即max(\frac{s}{B_{r}}, \frac{s*B_{l}}{A_{r}}) \leq max(\frac{s}{Ar}, \frac{s*A_{l}}{B_{r}}),則還需要滿足:\frac{s*B_{l}}{A_{r}} \leq \frac{s*A_{l}}{B_{r}},化簡得到:B_{l}*B_{r} \leq A_{l}*A_{r}

可以看出,若要取得金幣數的最小值min(ans_{1}, ans_{2}),則需要排在前面的大臣左右手兩個數的乘積小于等于排在后面的大臣左右手兩個數的乘積

最后需要注意下累成會涉及到高精度的運算,這里參考之前學習大數相乘和大數相除。(注意vector是從低精度開始存儲的,在比較和輸出時注意順序!)

#include<bits/stdc++.h>
#define endl '\n'
#define null NULL
#define ll long long
#define int long long
#define pii pair<int, int>
#define lowbit(x) (x &(-x))
#define ls(x) x<<1
#define rs(x) (x<<1+1)
#define me(ar) memset(ar, 0, sizeof ar)
#define mem(ar,num) memset(ar, num, sizeof ar)
#define rp(i, n) for(int i = 0, i < n; i ++)
#define rep(i, a, n) for(int i = a; i <= n; i ++)
#define pre(i, n, a) for(int i = n; i >= a; i --)
#define IOS ios::sync_with_stdio(0); cin.tie(0);cout.tie(0);
const int way[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
using namespace std;
const int  inf = 0x7fffffff;
const double PI = acos(-1.0);
const double eps = 1e-6;
const ll   mod = 1e9 + 7;
const int  N = 2e5 + 5;int n, y;
string x;
vector<int> X, A, ans;struct node{int id;int l;int r;int Pr;
}a[N];bool cmp(node x, node y){return x.l*x.r < y.l*y.r;
}vector<int> mul(vector<int> &A, int b)
{vector<int> C;int t = 0;for(int i = 0; i < A.size(); i ++){t += A[i] * b;C.push_back(t % 10);t /= 10;}//如果還可以進位while(t) C.push_back(t % 10), t /= 10;//去除前導0while(!C.back() && C.size()>1) C.pop_back();return C;
}vector<int> div(vector<int> &A, int b, int &r)
{vector<int> C;r = 0;for(int i = A.size() - 1; i >= 0; i -- ){r = r * 10 + A[i];C.push_back(r / b);r %= b;}reverse(C.begin(), C.end());while(C.size() > 1 && C.back() == 0 ) C.pop_back();//去前導0return C;
}vector<int> Comparison(vector<int> &A, vector<int> &B){if(A.size() > B.size()) return A;if(A.size() < B.size()) return B;for(int i = ans.size()-1; i >= 0; i --){    // 注意:vector存儲的高精度都是低位在前,高位在后if(A[i] > B[i]) return A;if(A[i] < B[i]) return B;}return A;
}signed main()
{IOS;cin >> n >> x >> y;for(int i = x.size() - 1; ~i; i --){X.push_back(x[i] - '0');}for(int i = 1; i <= n; i ++){a[i].id = i;cin >> a[i].l >> a[i].r;}sort(a+1, a+n+1, cmp);int r = 0;for(int i = 1; i <= n; i ++){
//        cout << a[i].id << " " << a[i].l << " " << a[i].r << endl;    // debugA = div(X, a[i].r, r);         // 計算前i-1個l乘積除以當前r的金幣數
//        for(int j = 0; j < A.size(); j ++){         // debug
//            cout << A[j];
//        }cout << endl;ans = Comparison(A, ans);    // 比較vector(金幣數)大小X = mul(X, a[i].l);     // 然后再乘以當前的r得到前i個l的乘積
//        for(int j = 0; j < X.size(); j ++){    // debug
//            cout << X[j];
//        }cout << endl;}for(int i = ans.size()-1; i >= 0 ; i --){    // 注意:從高位開始輸出cout << ans[i];}cout << endl;return 0;
}

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

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

相關文章

grpc 和限流Sentinel

基于gRPC的微服務通信模塊技術方案書 1. 總體架構設計 #mermaid-svg-TiN9cudEfW5mCWHm {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-TiN9cudEfW5mCWHm .error-icon{fill:#552222;}#mermaid-svg-TiN9cudEfW5mCWHm…

經典灰狼算法+編碼器+雙向長短期記憶神經網絡,GWO-Transformer-BiLSTM多變量回歸預測,作者:機器學習之心!

經典灰狼算法編碼器雙向長短期記憶神經網絡&#xff0c;GWO-Transformer-BiLSTM多變量回歸預測&#xff0c;作者&#xff1a;機器學習之心&#xff01; 目錄 經典灰狼算法編碼器雙向長短期記憶神經網絡&#xff0c;GWO-Transformer-BiLSTM多變量回歸預測&#xff0c;作者&#…

VGG Image Annotator (VIA):一款免費的數據標注軟件介紹與使用

VGG Image Annotator (VIA)&#xff1a;一款免費的數據標注軟件介紹與使用 在計算機視覺領域&#xff0c;數據標注是訓練機器學習模型的基礎步驟之一&#xff0c;而標注工具的選擇直接影響標注的效率和準確性。眾多標注工具中&#xff0c;VGG Image Annotator (VIA) 是一個開源…

CSS實現百分比水柱圖

背景 在echarts沒發現有可以直接使用的展示百分比的柱形圖,只好自己封裝一個組件使用 實現思路 一、圖形拆解 要實現的組件是一個 可配置的圓柱形液柱圖組件&#xff0c;常用于展示比例進度&#xff0c;比如任務完成度、指標達成率等。把圖拆成最小單元然后拼接起來&#x…

詳解 rzsz 工具:Windows 與 Linux 文件傳輸

&#xff08;Linux之軟件包管理器&#xff08;CentOS系統&#xff09; —— yum-CSDN博客&#xff09;rzsz工具之前我在這篇文章中介紹過&#xff0c;現在重新詳細介紹一下該工具。rzsz 是一個用于在 Windows 和 Linux 系統之間傳輸文件的工具集&#xff0c;通常通過終端模擬器…

網絡編程1(UDP)

網絡編程套接字&#xff08;socket api&#xff09; 了解了網絡的一些概念&#xff0c;接下來就要進行網絡中的跨主機通信&#xff0c;了解網絡中的一些API&#xff0c;這里談到的API都是針對傳輸層進行的&#xff0c;這是因為我們編寫的代碼是在應用層&#xff0c;而傳輸層就…

【電機】定點線性映射

這是一個定點數線性映射的問題&#xff0c;通常用于將浮點型的物理量&#xff08;如速度、位置、扭矩&#xff09;轉換為嵌入式系統中使用的整型數據格式&#xff0c;便于通過 CAN 總線或其它通信協議發送給電機控制器。 我們來逐步解析這個過程&#xff0c;并以“速度”為例說…

Spring Cloud 微服務(遠程調用與熔斷機制深度解析)

&#x1f4cc; 摘要 在微服務架構中&#xff0c;服務之間的遠程調用是構建分布式系統的核心環節。然而&#xff0c;隨著服務數量的增加和網絡復雜度的提升&#xff0c;調用失敗、延遲高、異常等問題變得越來越頻繁。 為此&#xff0c;Spring Cloud 提供了強大的遠程調用組件 …

electron-vite 抽離config.js

1、將config.js 放到resources下的config目錄下 module.exports {url: http://192.168.1.17:8000,wsUrl: ws://192.168.1.17:8000, }2、在preload.js 暴露讀取API src/preload/index.js(或你的preload入口) const fs require(fs); const path require(path);function getCo…

MySQL Undo Log 深度解析:事務回滾與MVCC的核心功臣

引言 作為MySQL的“數據后悔藥”和“歷史版本檔案館”&#xff0c;Undo Log&#xff08;回滾日志&#xff09;在事務處理和并發控制中扮演著至關重要的角色。今天咱們就從底層原理出發&#xff0c;結合實際場景&#xff0c;把Undo Log的“里里外外”說個明白&#xff01; 一、…

gin如何返回html

? 方法一&#xff1a;直接返回 HTML 字符串 這種方式適合簡單場景&#xff0c;比如返回一段固定的 HTML 內容。 package mainimport "github.com/gin-gonic/gin"func main() {r : gin.Default()r.GET("/html", func(c *gin.Context) {htmlContent : <…

Insulation score算法解讀

Insulation score&#xff08;IS&#xff09;&#xff0c;俗稱絕緣分數&#xff0c;用于計算識別三維基因組中的拓撲關聯結構域TAD。 首次提出是在&#xff1a; 1&#xff0c;概念 為染色體上的基因組區間分配‘絕緣評分’的方法。該評分用于衡量跨越每個區間的所有相互作用的…

電腦系統重裝有什么用?

一、解決系統軟件問題 1、修復系統崩潰與錯誤 系統出現頻繁藍屏、死機、啟動失敗或程序運行異常&#xff08;如驅動沖突、系統文件損壞&#xff09; 2、清除惡意軟件與病毒 電腦中病毒或惡意軟件難以通過殺毒軟件徹底清除 二、優化系統性能 1、清理冗余文件與設置 長時間…

js隨機生成一個顏色

在 JavaScript 中&#xff0c;隨機生成顏色有多種方式&#xff0c;以下是最常見的幾種實現方法&#xff1a; 方法1&#xff1a;生成隨機十六進制顏色&#xff08;如 #FFFFFF&#xff09; 這是最常見的方式&#xff0c;生成格式為 #RRGGBB 的顏色字符串&#xff1a; function…

運維打鐵: 服務器防火墻策略配置與管理

文章目錄 思維導圖一、防火墻基礎1. 防火墻概念2. 常見防火墻類型3. 防火墻工作原理 二、策略配置1. 規則制定原則2. 端口與服務開放Linux 系統&#xff08;以 iptables 為例&#xff09;Windows 系統&#xff08;以 Windows 防火墻為例&#xff09; 3. IP 地址過濾允許特定 IP…

locate 命令更新機制詳解

文章目錄 **一、定時更新的實現載體&#xff1a;crontab 任務****二、定時任務的配置邏輯****三、更新觸發的額外機制****四、更新流程的性能優化****五、常見問題與解決方案****總結** 一、定時更新的實現載體&#xff1a;crontab 任務 Linux 系統通常通過 crontab 定時任務 …

docker部署nacos【單機模式使用mysql,使用.env配置】(更新:2025/7/1~)

視頻 我的個人視頻&#xff0c;有詳細步驟 使用docker部署nacos_嗶哩嗶哩_bilibili 環境 虛擬機&#xff1a;VM&#xff0c;CentOS7 遠程連接工具&#xff1a;MobaXterm 使用工具 隨機生成字符串&#xff1a; 隨機字符串生成器 | 菜鳥工具 Base64編碼&#xff1a; B…

如何安全地清除筆式驅動器

您是否正在尋找安全清除筆式驅動器的方法&#xff1f;如果是的話&#xff0c;您可以從本文中得到4個有效的解決方案。無論您準備出售還是捐贈您的筆式驅動器&#xff0c;您都可以輕松清空筆式驅動器。雖然簡單的刪除似乎就足夠了&#xff0c;但殘留的數據通常可以恢復。因此&am…

信息新技術

目錄 分布式處理基礎 一、基礎概念 二、通信與網絡 三、分布式協調與一致性 四、分布式存儲與數據庫 五、分布式計算框架 六、容錯與高可用 七、負載均衡與調度 八、安全與監控 九、常見分布式系統設計模式 十、典型系統與工具學習 區塊鏈 區塊鏈的核心技術 物聯…

創客匠人解析創始人 IP 定位:從專業度到用戶心智的占領之道

在知識付費領域&#xff0c;創始人 IP 的定位往往決定了商業變現的天花板。創客匠人通過服務 5 萬 知識博主的實踐經驗&#xff0c;揭示了一個核心邏輯&#xff1a;定位的本質不是簡單的標簽設定&#xff0c;而是通過持續提升專業度&#xff0c;以實際成果占領用戶心智。這一過…