2023ICPC亞洲區域賽(合肥)VP補題題解(48th)

2023ICPC亞洲區域賽(合肥)VP補題題解記錄

文章目錄

  • 2023ICPC亞洲區域賽(合肥)VP補題題解記錄
    • 寫在前面
      • 已更新 E F G J,待更新 B I C
    • F and E(簽到題和簡單題)
    • G. Streak Manipulation
      • 題目大意
      • 題目分析
      • ac代碼參考
    • J. Takeout Delivering
      • 題目大意
      • 題目分析
      • ac代碼參考

寫在前面

已更新 E F G J,待更新 B I C

F and E(簽到題和簡單題)

F直接計數即可

ac代碼參考(FastIO已省略)

def solve():n = I()dic = {}for i in range(n):c = S()dic[c] = dic.get(c,0) + 1mx = 0ans = ''su = 0for k,v in dic.items():su += vif v > mx:mx = vans = kprint1(ans if mx > su/2 else "uh-oh")solve()

E 分離 x 和 y。

ac代碼參考

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5;int n,m;
map<int,int> mp;
int cnt;
int a[N][N];
vector<int> nx[1000005];
vector<int> ny[1000005];
void solve()
{cin>>n>>m;for(int i=1;i<=n;++i)for(int j=1;j<=m;++j){cin>>a[i][j]; }for(int i=1;i<=n;++i) for(int j=1;j<=m;++j){int x=a[i][j];if(!mp[x])mp[x]=++cnt;int idx=mp[x];nx[idx].push_back(i);ny[idx].push_back(j);}ll ans=0;for(int i=1;i<=cnt;++i){ll sum=0;for(int j=0;j<nx[i].size();++j){ans-=sum;ans+=j*1ll*nx[i][j]; sum+=nx[i][j];}sum=0;sort(ny[i].begin(),ny[i].end());for(int j=0;j<ny[i].size();++j){ans-=sum;ans+=j*1ll*ny[i][j];sum+=ny[i][j];}}cout<<ans*2ll<<'\n';
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);int t=1;
//	cin>>t;while(t--)solve();return 0;
} 

G. Streak Manipulation

題目大意

給你一個01串,告訴你串的長度 n ∈ [ 1 , 2 × 1 0 5 ] n\in[1,2\times10^5] n[1,2×105],最多可操作次數 m ∈ [ 1 , n ] m\in[1,n] m[1,n], 以及 k ∈ min ? ( n , 5 ) k\in\min(n,5) kmin(n,5)。每次操作可將一個 0 0 0 變為 1 1 1。要我們求,在不超過 m m m 次操作時,第 k k k 長的連續為 1 1 1 的串最長是多少。

題目分析

  • 我們考慮二分答案,即二分在最多 m m m 次操作后,第 k k k 長的最小是多少(看到這個最大值最小的是不是很容易想到二分)。
  • 想想check函數怎么實現,注意到 k ∈ min ? ( n , 5 ) k\in\min(n,5) kmin(n,5)
  • 我們考慮dp,以當前是考慮前幾個字符為階段,與 前面有 j j j 個長度大于 m i d mid mid 的連續 1 1 1 串和當前字符是0還是1共同構成狀態。
  • 對于當前的 m i d mid mid, 設 d p [ i ] [ j ] [ 0 / 1 ] dp[i][j][0/1] dp[i][j][0/1] 為前 i i i 個字符,有 j j j 段長度大于等于 m i d mid mid 的連續 1 1 1 串,且當前字符是否位于第 j j j 段連續 1 1 1 串的末尾(0為假1為真)所需的最少操作次數。
  • 考慮狀態轉移:
    • 如果 s [ i ] = = ′ 0 ′ s[i] == '0' s[i]==0
      • d p [ i ] [ j ] [ 0 ] = m i n ( d p [ i ] [ j ] [ 0 ] , d p [ i ? 1 ] [ j ] [ 0 ] , d p [ i ? 1 ] [ j ] [ 1 ] ) dp[i][j][0] = min({dp[i][j][0], dp[i-1][j][0], dp[i-1][j][1]}) dp[i][j][0]=min(dp[i][j][0],dp[i?1][j][0],dp[i?1][j][1])
      • d p [ i ] [ j ] [ 1 ] = m i n ( d p [ i ] [ j ] [ 1 ] , d p [ i ? 1 ] [ j ] [ 1 ] + 1 ) dp[i][j][1] = min({dp[i][j][1], dp[i-1][j][1] + 1}) dp[i][j][1]=min(dp[i][j][1],dp[i?1][j][1]+1)
    • 否則:
      • d p [ i ] [ j ] [ 0 ] = m i n ( d p [ i ] [ j ] [ 0 ] , d p [ i ? 1 ] [ j ] [ 0 ] ) dp[i][j][0] = min(dp[i][j][0], dp[i-1][j][0]) dp[i][j][0]=min(dp[i][j][0],dp[i?1][j][0])
      • d p [ i ] [ j ] [ 1 ] = m i n ( d p [ i ] [ j ] [ 1 ] , d p [ i ? 1 ] [ j ] [ 1 ] ) dp[i][j][1] = min(dp[i][j][1], dp[i-1][j][1]) dp[i][j][1]=min(dp[i][j][1],dp[i?1][j][1])
    • 此外在 i ≥ m i d a n d j ≥ 0 i\ge mid\ and \ j \ge0 imid?and?j0
      • d p [ i ] [ j ] [ 1 ] = m i n ( d p [ i ] [ j ] [ 1 ] , d p [ i ? m i d ] [ j ? 1 ] [ 0 ] + p r e [ i ] ? p r e [ i ? m i d ] ) dp[i][j][1] = min(dp[i][j][1], dp[i-mid][j-1][0] + pre[i] - pre[i-mid]) dp[i][j][1]=min(dp[i][j][1],dp[i?mid][j?1][0]+pre[i]?pre[i?mid])
  • p r e pre pre 記錄的是前綴中 0 0 0 的數量。總的時間復雜度為 O ( k n log ? ( n ) ) O(\ kn\log(n)\ ) O(?knlog(n)?)

ac代碼參考

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
int dp[N][6][2], pre[N];
int n,m,k;
string s;void solve(){auto check = [&](int mid){for (int i = 0; i <= n; i++)for(int j = 0; j <= k; j++)dp[i][j][0] = dp[i][j][1] = 0x3f3f3f3f;dp[0][0][0] = 0;for (int i = 1; i <= n; i++){for(int j = 0; j <= k; j++){if(s[i]=='0'){dp[i][j][0] = min({dp[i][j][0], dp[i-1][j][0], dp[i-1][j][1]});dp[i][j][1] = min({dp[i][j][1], dp[i-1][j][1] + 1});}else{dp[i][j][0] = min(dp[i][j][0], dp[i-1][j][0]);dp[i][j][1] = min(dp[i][j][1], dp[i-1][j][1]);}if (i >= mid && j >= 1)dp[i][j][1] = min(dp[i][j][1], dp[i-mid][j-1][0] + pre[i] - pre[i-mid]);}}return min(dp[n][k][0], dp[n][k][1]) <= m;};cin>>n>>m>>k>>s;s = "@" + s;for(int i = 1; i<=n; i++){pre[i] += pre[i-1] + (s[i] == '0');}int l = 0, r = 2e5;while (l < r){int mid = (l + r + 1) >> 1;if (check(mid)) l = mid;else r = mid - 1;}if(l)cout<<l<<'\n';else cout << "-1\n";}int main() {ios::sync_with_stdio(false);cin.tie(0);int t = 1;while (t--)solve();return 0;
}

J. Takeout Delivering

題目大意

給你一個無向連通圖,定義最短路為 path 中最貴的兩條邊之和,只有一條邊時就是邊權。求1到n的最短路。

n ∈ [ 2 , 3 × 1 0 5 ] , m ∈ [ max ? ( 1 , n ? 1 ) , 1 0 6 ] n\in[2,3\times10^5],m\in[\max(1,n-1),10^6] n[2,3×105],m[max(1,n?1),106]

題目分析

  • 我們考慮枚舉每條邊 E d g e ( x , y , z ) Edge(x,y,z) Edge(x,y,z) 以該條邊作為路徑上的最大邊權的邊。
  • 考慮第二大邊權的邊在哪?
  • 一定在 p a t h ( 1 , x ) , p a t h ( y , n ) path(1,x),path(y,n) path(1,x),path(y,n) p a t h ( 1 , y ) , p a t h ( x , n ) path(1,y),path(x,n) path(1,y),path(x,n)
  • 對于第二大邊權的邊,我們只需要預處理出從 1 1 1 和從 n n n 到各個點的最大邊權即可。
  • 具體實現見代碼,總的時間復雜度為 O ( m log ? m ) O(m\log m) O(mlogm)

ac代碼參考

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e5+5;
const int M=1e6+5;
struct Edge{int x,y,z;
}; int n,m,tot;
int ver[M+M],head[N],edge[M+M],nxt[M+M];
int d1[N],d2[N];
bool vis[N];
Edge ls[M];void solve()
{auto add = [&](int x,int y,int z){ver[++tot]=y,edge[tot]=z;nxt[tot]=head[x],head[x]=tot;};auto dijkstra = [&](int st,int *dist){priority_queue<pair<int, int> > q;memset(vis,0,sizeof(vis));for(int i=1;i<=n;++i)dist[i]=1e9+7;dist[st]=0;q.push({-0,st});while(!q.empty()){pair<int, int> tmp = q.top();q.pop();int x = tmp.second;if(vis[x]) continue;  vis[x] = 1;for(int i=head[x];i;i=nxt[i]){int y=ver[i];int w=edge[i];if (dist[y] > max(dist[x], w)){dist[y] = max(dist[x], w);q.push({-dist[y], y});}}}};cin>>n>>m;for(int i=1;i<=m;++i){int u,v,w;cin>>u>>v>>w;add(u,v,w);add(v,u,w);ls[i]={u,v,w};}dijkstra(1,d1);dijkstra(n,d2);int ans=2e9;for(int i=1;i<=m;++i){int x=ls[i].x,y=ls[i].y,z=ls[i].z;int tmp = min(max(d1[x],d2[y]), max(d1[y],d2[x]));if(tmp<=z)ans=min(ans,tmp+z);}cout<<ans<<'\n';
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);int t=1;while(t--)solve(); return 0;
}

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

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

相關文章

CSS-position/transform

1 需求 2 語法 在CSS中&#xff0c;positioning 和 transform 是兩個非常重要的概念&#xff0c;它們分別用于控制元素在頁面上的布局和變換。 Positioning CSS中的position屬性用于設置元素的定位類型。它有幾個值&#xff0c;包括&#xff1a; static&#xff1a;這是默認…

51單片機第12步_使用stdio.h庫函數仿真串口通訊

本章介紹如何使用stdio.h庫函數仿真串口通訊&#xff0c;學會使用view下面的“serial window #1”,實現模擬串口通訊。 Keil C51中有一些關鍵字&#xff0c;需要牢記&#xff1a; interrupt0:指定當前函數為外部中斷0&#xff1b; interrupt1:指定當前函數為定時器0中斷&…

MAC下的PDM工具

還在為MAC電腦下數據庫設計發愁嗎&#xff1f;從Windows切換到MAC&#xff0c;除了因為做蘋果開發以外&#xff0c;更大的一個理由是不想被工具束縛&#xff0c;使用習慣不一樣&#xff0c;不要緊。就像錢一樣&#xff0c;當我們成為錢的習慣就成為錢的奴隸了。但是用MAC一年多…

Java程序設計課后習題(答案版) 期末復習

第一章 Java語言概述 一、選擇題 下面哪種類型的文件可以在Java虛擬機中運行?( A ) A. class B. Java C. jre D. exe 如果JDK 的安裝路徑為“d:\jdk”&#xff0c;若想在命令窗口中任何當前路徑下&#xff0c;都可以直接使用javac和java命令&#xff0c;需要將環境變量path設…

攜手共筑愛的橋梁:引導接納自閉癥同學

在孩子的班級中&#xff0c;當自閉癥兒童成為我們共同的一員時&#xff0c;作為老師和家長&#xff0c;我們肩負著特別的責任——引導孩子們以開放的心態接納、善待并關愛他們。 首先&#xff0c;我們要以身作則&#xff0c;展現接納與尊重。無論是老師還是家長&#xff0c;都…

筆記:Git學習之應用場景和使用經驗

目標&#xff1a;整理Git工具的應用場景和使用經驗 一、開發環境 Git是代碼版本控制工具&#xff1b;Github是代碼托管平臺。 工具組合&#xff1a;VSCode Git 需要安裝的軟件&#xff1a;vscode、Git 其中vscode需要安裝的插件&#xff1a;GitLens、Git History 二、應用…

沒有析構函數的子類

在C中&#xff0c;如果一個類沒有定義析構函數&#xff0c;編譯器會為其生成一個默認的析構函數。這個默認析構函數會按照以下方式工作&#xff1a; 析構基類&#xff1a;如果類是從一個基類繼承而來的&#xff0c;默認析構函數會調用基類的析構函數。 析構成員&#xff1a;默…

倉庫貨物管理系統

摘 要 隨著信息技術的迅猛發展&#xff0c;大數據已經成為推動各行各業變革的重要力量。特別是在物流倉儲領域&#xff0c;大數據技術的應用不僅能夠顯著提升倉庫貨物管理的效率&#xff0c;還能夠優化庫存管理、減少成本、提高客戶滿意度。因此&#xff0c;基于大數據的倉庫貨…

webstorm 高效查看不同分支差異 摒棄你的git diff手動操作

背景 每次代碼沖突或者版本發生異常時&#xff0c;排查不同版本時就是一個頭大的問題&#xff0c;頭大的點在于用 vscode 的 git diff 一點點地排查和比較&#xff0c;耗時耗力&#xff0c;版面展不開&#xff0c;commit 差異看不出來&#xff0c;每個頁面的代碼不同也不能快速…

2007-2023年36家商業銀行綠色信貸、期末貸款總額、銀行總資產等相關指標數據(2023年無缺失)

2007-2023年36家商業銀行綠色信貸數據&#xff08;2023年無缺失&#xff09; 1.時間&#xff1a;2007-2023年&#xff0c;2023年無缺失 2.來源&#xff1a;銀行年報和社會責任報告 3.指標:綠色信貸余額、期末貸款總額、綠色信貸比率、總資產收益率、流動性比率、撥備覆蓋率、…

使用Linux的openssl生成https的ssl密鑰,然后自己簽名

新建一個文件夾 mkdir all_https_ssl cd all_https_ssl第一步&#xff1a; 生成一個密鑰&#xff0c;長度自定&#xff0c;比如2048&#xff08;防止有些應用要求密鑰長度不能太短&#xff09; openssl genrsa -out key.pem 2048第二步&#xff1a; 使用私鑰來生成證書請求…

最優化方法Python計算:標準型線性規劃的輔助問題

對標準型線性規劃 { minimize c ? x s.t. A x b x ≥ o ( 1 ) \begin{cases} \text{minimize}\quad\quad\boldsymbol{c}^\top\boldsymbol{x}\\ \text{s.t.\ \ \ \ }\quad\quad\quad\boldsymbol{Ax}\boldsymbol{b}\\ \quad\quad\quad\quad\quad\quad\boldsymbol{x}\geq\b…

軟件資產管理系統:提升企業透明度與合規性的終極解決方案!

在當今數字化時代&#xff0c;企業軟件資產的管理變得愈發復雜和重要。為了幫助企業更好地管理軟件資產、提升透明度和確保合規性&#xff0c;smartlic軟件資產管理系統應運而生。本文將深入探討smartlic系統的核心功能、實施案例及未來展望&#xff0c;為您揭示這一系統如何成…

Linux Ubuntu 20.04.06 安裝Onboard虛擬鍵盤教程

目錄 一、在線安裝 二、源碼安裝 三、包安裝 四、設置 五、禁用系統鍵盤 一、在線安裝 sudo apt-get update #更新軟件源 sudo apt-get install onboard #安裝Onboard sudo apt-get purge onboard # 卸載 安裝后&#xff0c;如果在終端使用命令&#xff1a;onboard 啟…

fio作圖

fio --filenametest_file --direct1 --rwrandwrite --numjobs1 --iodepth16 \ --ioenginelibaio --bs4k --group_reporting --namezhangyi --log_avg_msec500 \ --write_bw_logtest-fio --write_lat_logtest-fio --write_iops_logtest-fio --size1G 結果如下有&#xff1a; …

2002-2022年各省老年人口撫養比(人口抽樣調查)數據

2002-2022年各省老年人口撫養比(人口抽樣調查)數據 1、時間&#xff1a;2002-2022年 2、指標&#xff1a;老年人口撫養比 3、來源&#xff1a;國家統計局、統計年鑒 4、范圍&#xff1a;31省&#xff0c; 5、缺失情況&#xff1a;無缺失&#xff0c;其中2010年的值取2009、…

華為 eNSP 模擬器 配置RIP實例 動態路由協議

1 實驗拓撲 2 配置路由器 #R1 Huawei>sys [Huawei]sysname R1 [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 255.255.255.0 [R1-GigabitEthernet0/0/0]qu [R1]rip [R1-rip-1]network 192.168.1.0 [R1-rip-1]version 2 [R1-rip-…

ffmpeg在powershell和ubuntu終端下的不同格式

在win10下的powershell中&#xff0c;如果想運行一個exe文件&#xff0c;就不能再像cmd命令行一樣用名字來直接運行了&#xff0c;否則會提示格式不對。 正確的做法是&#xff1a; . \ffmpeg.exe -re -i video-test.mpr -rtsp_transport tcp -vcodec h264 -f rtsp rtsp://您的…

C語言中static關鍵字的作用與用法解析

C語言中static關鍵字的作用與用法解析 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; C語言中static關鍵字的作用與用法解析 1. static關鍵字的基本概念 在…

C# 特性 Attribute 反射 Reflection 元數據 Metadata

在C#中&#xff0c;元數據&#xff08;Metadata&#xff09;是指與程序代碼本身相關的數據&#xff0c;這些數據提供了代碼的額外信息&#xff0c;但并不直接影響代碼的執行。元數據在.NET框架中扮演著重要的角色&#xff0c;以下是一些常見的元數據類型和它們的用途&#xff1…