河南萌新聯賽2025第四場-河南大學

今天又是坐牢的一次比賽,恭喜獲得本次比賽稱號:掛機王,一個簽到題能卡住兩個小時,這兩個小時簡直坐的我懷疑人生,實在是找不出哪里錯了,后來快結束的時候才發現少了一個等于號,也不至于連簽到題都沒寫出來 -_-!。

比賽連接:河南萌新聯賽2025第(四)場:河南大學_ACM/NOI/CSP/CCPC/ICPC算法編程高難度練習賽_牛客競賽OJ

本次出題方給出的題目難度如下:

難度評估

  • 簽到:A,C,G,J

  • 簡單:B,D,L

  • 中等:F,H,I

  • 困難:E,K

我做題的順序為G、C、A、J,我也是本本分分地寫了寫簽到題,簡單題甚至都開不出來,既然都比賽結束了,就當又是一次鍛煉了,多多積累一些比賽的思維以及解題技巧,下面就開始補題吧。

G-封閉運算

題目鏈接:G-封閉運算_河南萌新聯賽2025第(四)場:河南大學

剛開始的我竟然找不出來哪一個才是簽到題,???我的Hello World呢?在找了一分鐘之后實在是沒辦法了,就找了一個看著最好欺負的下手了,一看數據范圍,小于100??!,這我還猶豫什么,直接三重循環暴力拿下!

賽時代碼:

// Problem: 封閉運算
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/115184/G
// Memory Limit: 512 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define pii pair<int,int>
#define fi first
#define se second
const int inf = 0x3f3f3f3f;void solve()
{int n;cin>>n;int k=1;vector<int> a(n+1);for(int i=1;i<=n;i++) cin>>a[i];bool f = 1;for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){int t = a[i] | a[j];//異或操作for(k=1;k<=n;k++){if(t == a[k]){break;}}if(k == n+1){f = 0;break;}}}if(f) cout<<"YES"<<endl;else cout<<"NO"<<endl;
//	cout<<fixed<<setprecision(x)<< ; 
}signed main()// Don't forget pre_handle!
{IOSint T=1;
//	cin>>T;while(T--) solve(); return 0;
} 

接下來是廣告時間:有小伙伴對位運算還不是很了解的,可以點擊此處一秒邁入位運算的世界!

C-合并石子

題目鏈接:C-合并石子_河南萌新聯賽2025第(四)場:河南大學

這道題我們要求出最少消耗的體力,具體是讓所有的石子扔到哪一堆呢?看起來似乎很難找出規律,既然這樣,就要開始枚舉了,大體思路如下:

由題意可得,所有石子最后一定會合并到某一個位置,可以枚舉最終位置,取所有情況中所花費體力的最小值。

對于位置x,在 [1,x-1]?區間中的石子一定會不斷向x合并,在區間 [x+1,n]?區間中的石子也一定會不斷向x合并。

由于每次合并是向上取整的,所以從離x置最遠的石子開始合并一定更優,預處理前綴和后綴的體力消耗便可以O(1)的時間復雜度得到合并到位置x所花費體力的最小值。

所以 總的時間復雜度為O(N)。

這種思想是很常見的一種算法思維了,正向和逆向分別跑一遍就能求出每個點兩端的情況(代價)接下來就遍歷一遍所有的點取最值就行了。

賽時代碼如下:

// Problem: 合并石子
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/115184/C
// Memory Limit: 512 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define pii pair<int,int>
#define fi first
#define se second
const int inf = 1e18;//不要用0x3f3f3f3f了,這道題的數據較大,用這個會WA的 別問我怎么知道的void solve()
{int n,m;cin>>n>>m;vector<int> a(n+1),l(n+2,0),r(n+2,0);for(int i=1;i<=n;i++) cin>>a[i];int ans=inf,sum=0;for(int i=1;i<=n;i++)//正向跑一遍求出每個點所需的體力值{int t = sum / m;if(sum % m) t++;l[i] = t;sum += a[i];}sum = 0;for(int i=n;i>=1;i--)//逆向跑一遍求出每個點所需的體力值{int t = sum / m;if(sum % m) t++;r[i] = t;sum += a[i];}//因為是求的單個點的,所以還需要用前綴和與后綴和來統計到達該點一共所需的體力值for(int i=1;i<=n;i++) l[i] = l[i] + l[i-1];//前綴和for(int i=n;i>=1;i--) r[i] = r[i+1] + r[i];//后綴和//最后只需要遍歷一遍求出最小體力就行了for(int i=1;i<=n;i++) ans = min(ans,l[i] + r[i]);cout<<ans<<endl;// debug:// for(auto i : l) cout<<i<<' ';// cout<<endl;// for(auto i : r) cout<<i<<' ';
//	cout<<fixed<<setprecision(x)<< ; 
}signed main()// Don't forget pre_handle!
{IOSint T=1;
//	cin>>T;while(T--) solve(); return 0;
} 

這道題需要注意的就是inf(無窮大)不能用0x3f3f3f3f,不然會wa的,可以用1e18來賦值給 inf

A-完美序列

題目鏈接:A-完美序列_河南萌新聯賽2025第(四)場:河南大學

這道題第一眼除了暴力跑一遍枚舉所有的情況就想不出更好的辦法了,可是看了一眼數據范圍2e5這我怎么跑?本來都想放棄了,可是后來又看了一眼數據范圍,雖然元素的個數是2e5,但是元素的大小范圍只有5000啊!我的思路想法瞬間就有了,枚舉所有可能的和!對,就是這樣,這樣的時間復雜度是....兩個數的和最大不超過10000,然后每個數都大小是5000,所以是5e7,剛好擦邊,嘶~,我的心情瞬間又跌入了谷底,一看時間要求,誒?2s?我瞬間來了斗志,直接暴力將代碼寫了出來,在CP-Editor上信心滿滿的一運行!誒???:

這怎么T了?當時的天又塌了,后來開始去想優化的方法,首先K是不能再少了的,那就看看內層循環能不能減少一部分,對于枚舉的每一個和K,我們其實只需要枚舉到K/2就行了啊,因為我們已經用map存放所有的元素了,枚舉i的時候K -?i是可以直接算出來的,所以就可以在這里進行一個優化,想到這里,我立馬開始了更改,果不其然,代碼跑出來了:

嘶~,舒服多了,提交上去:

沒錯!天又塌了!這怎么會錯呢?都這么暴力了!后來才發現最后的結果必須是偶數,所以少了一個判斷,總的來說,這道題的解題思路如下:

我們在枚舉和K的時候,如果當前內層循環所遍歷的i存在,并且k-i也存在,那么我們就需要判斷兩個數時候相等了,如果i和k-i不相等的話,直接就是讓t累加到兩個數出現的次數的最小的那個再*2就行了,但如果是兩個數相等,即 i == k-i 的時候,就說明是只有這一個了,就不需要*2,直接加上就行了,但是需要注意的是有可能在這里加的是一個奇數,所以需要在最后進行判斷,如果答案是奇數的話就需要--。

我趕緊加上了最后的判斷,再提交!

舒服了,賽時代碼如下:

// Problem: 完美序列
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/115184/A
// Memory Limit: 512 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define pii pair<int,int>
#define fi first
#define se second
const int inf = 0x3f3f3f3f;void solve()
{int n;cin>>n;unordered_map<int,int> mp;vector<int> a(n+1);for(int i=1;i<=n;i++){cin>>a[i];mp[a[i]]++;//統計每一個元素出現的次數}int res = 0;for(int k=10002;k>1;k--)//暴力枚舉素所有可能的和K{int t = 0;for(int i=1;i<=k/2;i++)//小優化{if(mp[i] > 0 && mp[k-i] > 0)//只有兩半都存在的時候才有能組成K{// cout<<t<<' ';t += 2 * min(mp[i],mp[k-i]);//如果i == k - i了,就需要減去多加的一組if(i * 2 == k) t -= min(mp[i],mp[k-i]);}}// cout<<"k = "<<k<<"  "<<t<<endl;res = max(res,t);//每次更新最大值}if(res & 1) res --;//如果最后的答案為奇數了,就說明在在枚舉的i == k - i的時候加上了奇數 需要減去一個cout<<res<<endl;
//	cout<<fixed<<setprecision(x)<< ; 
}signed main()// Don't forget pre_handle!
{IOSint T=1;
//	cin>>T;while(T--) solve(); return 0;
} 

這道題讓我真正體驗到了ACM的魅力,隨著一陣陣的興奮和隨之而來的沉默,隨著苦思冥想突然靈光一現!這中心情和心態的起起伏伏和一波三折,以及看到自己優化的代碼通過了這道題,這種感覺是很難描述的,那一瞬間真的能消除所有的疲憊!希望我們都能得到自己滿意的結果!

J-故障機器人的完美牌組

題目鏈接:J-故障機器人的完美牌組_河南萌新聯賽2025第(四)場:河南大學

這是一道貪心的題目,給我的感覺很像最近這幾天刷的cf上的題目,也就是因為這道題卡了我兩個多小時,題目的意思十分容易理解,貪心的思路也很好想出來:就是從第二個數開始往后找,找出最大的那一個數讓它和第一個數進行累加,最后刪除這個數就是字典序最大的情況了,而如果最大的都是0的話,即從第二個數開始后面的數都是0的話,就沒必要進行操作了,因為不管怎么加第一個數都保持不變,而要想讓字典序最小的話,就直接將原數組輸出進行了,因為原數組與操作后的數組相比,元素更多,長度更長,字典序也就相對更大。這就是貪心的思路,可是我在編譯器上通過之后,隨之而來的就是:

嘶~怎么回事,這還不貪???我苦苦想了半天都沒有想出來需要特判的地方了,當時我的思路都開始混亂了,于是我想到了之前的隊友跟我說的一句話:如果你覺得你的思路沒有啥大問題,就重新敲一遍代碼,也許就是你的代碼太亂了有些細節忽略了,于是我又重新敲了一遍,并且還換了一種碼風,在題目的樣例和自己造的樣例都通過之后又交了上去:

呵呵,這時候心都涼半截了,沒辦法,各種姿勢開始想哪里的問題,終于在比賽結束的四十分鐘前,我突然想到了一個問題,想讓字典序最大,那我在找最大值的時候,如果有多個最大值的話,我就需要讓大的盡量在前面,所以我就需要將最后一個最大值來與第一個進行替換!比如說樣例1202,我們需要將最后一個2與第一個匹配為320而不是讓第一個2與之匹配變為302,于是我立馬將小于換為了小于等于,不信邪的又交了一發:

又舒服了,此時我看著所剩的寥寥無幾的比賽時間和別人WA了七八發的下一道題,逐漸陷入了沉思.....不過很容易能看出來下一道題L考察的是素數篩,素數篩我前幾天也整理過一篇博客,有興趣的話可以點擊這里:數論中的常用模板,但是賽時就是想不起來怎么篩了,還有B題,可以看出來是整除分塊,但是具體怎么分還是沒有思路,在上面的這篇博客中也有提到,emmm,剩下的題目明天再補,大家盡請期待!

J題的賽時代碼:

// Problem: 故障機器人的完美牌組
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/115184/J
// Memory Limit: 512 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define pii pair<int,int>
#define fi first
#define se second
const int inf = 0x3f3f3f3f;void solve()
{int n;cin>>n;bool f = 1;vector<int> a(n+5,0);for(int i=1;i<=n;i++) cin>>a[i];int mx = -1,index = -1;if(n == 1)//對1的情況進行特判{cout<<1<<endl;cout<<a[1]<<endl;return ;}for(int i=2;i<=n;i++){if(mx <= a[i])//一定是等于 要找最后一個最大值{mx = a[i];index = i;}if(a[i] > 0) f = 0;//找到了一個非0的數字}//甚至都懷疑過是三目運算符的問題...// cout<<(f == 0 ? n-1 : n)<<endl;if(f)//全部都是0的話就將原數組輸出就行了 此時原數組的字典序就最大{cout<<n<<endl;for(int i=1;i<=n;i++) cout<<a[i]<<' ';}else//有最大值的話就將最后一個最大值賦值給第一個元素 然后將其刪除就行了{cout<<n-1<<endl;a[1] += mx;for(int i=1;i<=n;i++){if(i == index) continue;//跳過這個元素 因為這個元素已經被刪除了 和第一個元素進行累加了cout<<a[i]<<' ';}}
//	cout<<fixed<<setprecision(x)<< ; 
}signed main()// Don't forget pre_handle!
{IOSint T=1;// cin>>T;while(T--) solve(); return 0;
} 

B-0!!!!!

D-箭頭謎題Ⅰ

L-故障機器人的完美遺物

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

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

相關文章

【Excel】通過Index函數向下拖動單元格并【重復引用/循環引用】數據源

文章目錄CASE1: 列數據源&#xff0c;向下拖動&#xff0c;每個單元重復N次步驟1&#xff1a;基本的INDEX函數步驟2&#xff1a;添加行號計算步驟3&#xff1a;添加絕對引用以便拖動CASE2:列數據源&#xff0c;向下拖動&#xff0c;每個單元重復1次&#xff0c;周而復始步驟1&a…

潛行者2:切爾諾貝利之心 全DLC 送修改器(S2HOC)免安裝中文版

網盤鏈接&#xff1a; 潛行者2&#xff1a;切爾諾貝利之心 免安裝中文版 名稱&#xff1a;潛行者2&#xff1a;切爾諾貝利之心 全DLC 送修改器&#xff08;S2HOC&#xff09;免安裝中文版 描述&#xff1a; 探索傳奇的《潛行者》世界&#xff0c;同時體驗&#xff1a; 融合…

系統運維之LiveCD詳解

基本概念LiveCD是一個包含完整可運行操作系統的光盤映像&#xff0c;能夠在不影響主機系統的情況下啟動計算機。工作原理系統從LiveCD介質啟動 將必要文件加載到內存中運行 通常使用RAM磁盤作為臨時文件系統 關機后所有更改默認不保存&#xff08;除非特別配置&#xff0…

達夢分布式集群DPC_分布式任務執行拆分流程_yxy

達夢分布式集群DPC_分布式執行計劃執行拆分流程 1 DPC任務拆分原理 1.1 分布式架構思想 1.2 DPC如何實現任務拆分? 2 DPC任務拆分完整示例 2.1 單表查詢 2.1.1 創建分區表,存儲在不同BP上 2.1.2 生成sql的最佳執行計劃 2.1.3 代碼生成并執行、拆分 2.1.3.1 任務拆分步驟 2.1.…

怎么免費建立自己的網站步驟

以下是免費建立個人網站的詳細步驟&#xff0c;結合多種方案和工具推薦&#xff1a; 一、零基礎快速建站方案 ?選擇免費建站平臺? PageAdmin CMS?&#xff1a; 1、提供開源模板&#xff0c;模板可以自定義界面和風格&#xff0c;同時支持原創設計和定制。 2、后臺支持自定義…

使用ASIWebPageRequest庫編寫Objective-C下載器程序

全文目錄&#xff1a;開篇語前言為什么選擇ASIWebPageRequest&#xff1f;安裝ASIWebPageRequest庫編寫下載器程序1. 導入必要的庫2. 創建下載任務3. 設置下載保存路徑4. 發起下載請求5. 更新下載進度6. 處理下載完成7. 處理下載失敗完整代碼示例8. 運行程序總結文末開篇語 哈嘍…

mathtype加載項搞崩了word(上)

一、Mathtype更新后word異常 在mathtype更新后&#xff0c;打開word文件時一直報宏的錯&#xff1a; 點擊“取消”&#xff1a; 點擊“確定”&#xff1a; 點擊“確定”&#xff1a; 點擊“確定”&#xff1a; 還有一堆小彈窗&#xff0c;最后還是能打開word文件&#xff1a; …

算法入門第一篇:算法核心:復雜度分析與數組基礎

引言&#xff1a;為什么需要學習算法&#xff1f; 你可能也發現&#xff0c;即使是社招&#xff0c;面試官也時不時會拋出幾道算法題&#xff0c;從簡單的反轉鏈表到復雜的動態規劃。這常常讓人感到困惑&#xff1a;我一個做游戲開發的&#xff0c;寫好 Unity 的 C# 代碼&…

從“聽指令”到“當參謀”,阿里云AnalyticDB GraphRAG如何讓AI開竅

01、背景 在智能客服與醫療問診領域&#xff0c;用戶模糊描述導致的多輪對話斷裂與語義關聯缺失&#xff0c;長期阻礙決策效率提升。傳統 RAG 技術面臨雙重困境&#xff1a; 單輪檢索局限&#xff1a;當用戶僅反饋“空調制冷效果差”、“持續發熱三天”等模糊信息時&#xff…

javascript常用實例

常見字符串操作字符串反轉const reversed hello.split().reverse().join(); console.log(reversed); // olleh檢查回文字符串function isPalindrome(str) {return str str.split().reverse().join(); }數組處理方法數組去重const unique [...new Set([1, 2, 2, 3])]; // [1,…

RK3568下用 Qt Charts 實現曲線數據展示

實際效果: 在工業監控、智能家居等場景中,實時數據可視化是核心需求之一。本文將介紹如何使用 Qt5 的 Charts 模塊,快速實現一個支持溫度、濕度、大氣壓和噪聲四個參數的實時監測系統,包含曲線動態繪制、坐標軸自適應、多窗口布局等實用功能。 項目背景與目標 環境參數監…

接口自動化測試用例詳解

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快Post接口自動化測試用例Post方式的接口是上傳接口&#xff0c;需要對接口頭部進行封裝&#xff0c;所以沒有辦法在瀏覽器下直接調用&#xff0c;但是可以用Curl命令…

JavaEE初階第十四期:解鎖多線程,從 “單車道” 到 “高速公路” 的編程升級(十二)

專欄&#xff1a;JavaEE初階起飛計劃 個人主頁&#xff1a;手握風云 目錄 一、JUC的常見類 1.1. Callable接口 1.2. ReentrantLock? 1.3. 信號量Semaphore 1.4. CountDownLatch 二、線程安全的集合類 2.1. 多線程環境使用 ArrayList? 2.2. 多線程環境使用哈希表 一、…

什么是RabbitMQ?

什么是RabbitMQ? 一、什么是RabbitMQ? 二、Rabbitmq 的使用場景? 三、RabbitMQ基本概念 四、RabbitMQ的工作模式 1. **簡單隊列模式(Simple Queue)** 2. **工作隊列模式(Work Queue)** 3. **發布/訂閱模式(Publish/Subscribe)** 4. **路由模式(Routing)** 5. **主題…

DVWA靶場第一關--Brute force 新手入門必看!!!

文中涉及講解burp爆破模塊介紹可能不太準確&#xff0c;請大佬批評指正就dvwa靶場而言&#xff0c;兩個常見漏洞讓我有了新的認知第一個接觸的漏洞為弱口令漏洞&#xff0c;常見情況下&#xff0c;人們口中的弱口令可能為“姓名縮寫”“123456”“生日簡寫等”接觸了dvwa&#…

完美解決Docker pull時報錯:https://registry-1.docker.io/v2/

1、錯誤描述rootubuntu-database:/opt/dify/docker# docker compose up -d [] Running 9/9? api Error context canceled …

用 Python 批量處理 Excel:從重復值清洗到數據可視化

引言日常工作中&#xff0c;經常需要處理多份 Excel 表格&#xff1a;比如合并銷售數據、清洗重復的用戶信息&#xff0c;最后生成可視化圖表。手動操作不僅效率低&#xff0c;還容易出錯。這篇文章分享一套 Python 自動化流程&#xff0c;用pandas和matplotlib搞定從數據清洗到…

4.5 點云表達方式——圖

(一)定義與原理 圖4-5-1 點云圖結構

wordpress菜單調用的幾種常見形式

在WordPress主題開發里&#xff0c;“菜單”在前端頁面中常見的調用/輸出形式可以歸納為5種&#xff0c;按出現頻率從高到低列給你&#xff0c;并給出最簡代碼片段&#xff0c;方便直接復制粘貼。 標準菜單位置調用(99%場景) 后臺“外觀→菜單”里把菜單A指派到菜單位置prima…