CF思維小訓練(二)

清晰的繽紛的都可以
臟兮兮的甜的也都有轉機
不想太小心
錯過第一百零一場美麗

CF思維小訓練(二)

書接上回CF思維小訓練-CSDN博客

雖然代碼很短,都是每一道題的背后都思維滿滿;

目錄

  • CF思維小訓練(二)
    • Arboris Contractio
    • Adjacent XOR
    • Scammy Game Ad
    • Rudolf and 121
    • Deadly Laser


Arboris Contractio

Problem - 2131D - Codeforces

一開始看到題目的思路是先找到鏈接最多的點然后用spfa找一遍最遠的點,然后再從這個點出發找一遍里這個點的最遠點,這樣就找到了這個樹的直徑,然后看直徑上有幾個分支就再操作幾次;(學算法學魔怔了)與題意有較大的偏差;

其實只用找子葉節點的個數即可,因為分析這個操作的本質,每次操作只能減少一個子葉那條路徑的情況,因為操作都會連到第一個點上;所以根本不需要那么麻煩,直接統計子葉節點的個數就好了;

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#define endl '\n'
const int N=2e5+5;
const int inf=0x3f3f3f3f;
vector<int> e[N];
void slove(){int n;cin>>n;for(int i=1;i<=n;i++)e[i].clear();for(int i=1;i<n;i++){int u,v;cin>>u>>v;e[u].push_back(v);e[v].push_back(u);}if(n==2){cout<<0<<endl;return ;}int an=0;for(int i=1;i<=n;i++)if(e[i].size()==1) an++;int mx=0;for(int i=1;i<=n;i++){int c=0;for(auto v:e[i]){if(e[v].size()==1)c++;}mx=max(mx,c);}cout<<an-mx<<endl;
} 
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--)slove();return 0;
} 

Adjacent XOR

Problem - 2131E - Codeforces

這道題不算難,我們要判斷能否通過ai=ai⊕ai+1a_i=a_i⊕a_{i+1}ai?=ai?ai+1?的操作將數組aaa變成數組bbb;也就是看bib_ibi?是佛滿足bi=ai⊕ai+1b_i=a_i⊕a_{i+1}bi?=ai?ai+1?或者bi=aib_i=a_ibi?=ai?

利用異或的性質推出,如果bi=ai⊕ai+1b_i=a_i⊕a_{i+1}bi?=ai?ai+1?那么ai+1=ai⊕bia_{i+1}=a_i⊕b_iai+1?=ai?bi?;所以我們每個位置上判斷一下是佛符合條件即可;

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pii pair<int,int>
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const int N=2e5+5;
int a[N],b[N];
void slove(){int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) cin>>b[i];if(a[n]!=b[n]){cout<<"NO"<<endl;return ;}for(int i=1;i<n;i++){int x=a[i]^b[i];if(x!=0&&a[i+1]!=x&&b[i+1]!=x){cout<<"NO"<<endl;return ;}}cout<<"YES"<<endl;
} 
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--)slove();return 0;
}

Scammy Game Ad

Problem - D - Codeforces

一開始看到題目的反應是貪心;但是貪心只能保證是局部最優解;我們需要的是全局最優解,所以不難想到利用動態規劃的思路;但是問題又來了,動態規劃要求無后效性,但是題目中的每次選擇都會對后面的狀態產生影響,所以可以換個思路,從后往前進行dp;

觀察題目可以發現加法操作時的更新量是唯一的,不管原來是多少,增加的量都是固定的,所以可以先把加法門存起來再原位置變成×1門,相當于在這個門后又加入了新的人;等到最后在判斷增加的人的最優情況;剩下的就是對乘法門的處理了,此時倒序遍歷就可以保證無后效性利用貪心的思想求解即可;(dp數組有點類似后綴和,將后面的最優倍率存起來)

最后累加結果,不要忘記最開始的兩個人;

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pii pair<int,int>
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const int N=1e5+5;
int b[N][3],dp[N][3];
int a[N];
void slove(){memset(a,0,sizeof a);memset(b,0,sizeof b);memset(dp,0,sizeof dp);int n;cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=2;j++){char op;int x;cin>>op>>x;if(op=='+') a[i]+=x;else b[i][j]=x-1;}}dp[n][1]=1,dp[n][2]=1;for(int i=n;i>=1;i--){for(int j=1;j<=2;j++){dp[i-1][j]=dp[i][j]+b[i][j]*max(dp[i][1],dp[i][2]);}}int an=dp[0][1]+dp[0][2];for(int i=1;i<=n;i++){an+=a[i]*max(dp[i][1],dp[i][2]);}cout<<an<<endl;
} 
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--)slove();return 0;
}

Rudolf and 121

Problem - 1941B - Codeforces

讓我們考慮最小的 i 使得 ai > 0;將這個元素變為零的唯一方法是選擇第 (i+1) 個元素進行操作(對更左側的元素進行操作要么不可能,要么會導致某些元素變為負數)我們將以這種方式進行操作,直到到達數組末尾;如果在應用這些操作后仍有非零元素剩余,則答案為 “NO”;

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pii pair<int,int>
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const int N=2e5+5;
int a[N];
void slove(){int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<n-1;i++){if(a[i]<0){cout<<"NO"<<endl;return ;}int x=a[i];a[i]-=x;a[i+1]-=2*x;a[i+2]-=x;}if(a[n]||a[n-1])cout<<"NO"<<endl;else cout<<"YES"<<endl;
} 
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--)slove();return 0;
}

Deadly Laser

Problem - 1721B - Codeforces

首先,我們需要判斷是否有可能到達終點。如果激光的覆蓋范圍沒有觸及任何墻壁,那么顯然可以到達——只需沿著墻壁行走即可。

如果激光最多只觸及一面墻,仍然可以到達。如果激光覆蓋的是下墻或左墻,則選擇靠近上墻和右墻的路徑;反之,如果激光覆蓋的是上墻或右墻,則選擇靠近下墻和左墻的路徑。

但如果這兩條路徑都被封鎖了呢?這意味著激光同時覆蓋至少兩面墻:上墻和左墻,或者下墻和右墻。事實證明,在這兩種情況下,完全無法到達終點。你可以畫個圖自己驗證一下。

因此,我們總是可以選擇至少一條沿墻壁的路徑。從起點到終點的距離是 ∣n?1∣+∣m?1∣,而這兩條路徑的長度恰好等于這個值。所以答案要么是 ?1,要么是 n+m?2。

要檢查激光的覆蓋范圍是否觸及墻壁,可以使用公式計算,或者檢查靠近墻壁的每個單元格。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pii pair<int,int>
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const int N=1e5+5;
void slove(){int n,m,sx,sy,d;cin>>n>>m>>sx>>sy>>d;int x=min(sx-1,m-sy);int y=min(n-sx,sy-1);if(x<=d&&y<=d)cout<<-1<<endl;else cout<<n+m-2<<endl;
} 
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--)slove();return 0;
}

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

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

相關文章

分布式鎖:從理論到實戰的深度指南

1. 分布式鎖是啥&#xff1f;為什么它比單機鎖更“硬核”&#xff1f;分布式鎖&#xff0c;聽起來高大上&#xff0c;其實核心問題很簡單&#xff1a;在多個機器、進程或服務同時搶奪資源時&#xff0c;怎么保證不打架&#xff1f; 想象一下&#xff0c;你在雙十一搶購限量款球…

基于UniApp的智能在線客服系統前端設計與實現

了解更多&#xff0c;搜索“程序員老狼”一、引言在當今數字化時代&#xff0c;客戶服務已成為企業競爭力的重要組成部分。本文將詳細介紹一款基于UniApp框架開發的跨平臺智能客服系統前端實現方案&#xff0c;該系統不僅具備傳統客服功能&#xff0c;還融入了現代即時通訊和人…

react與vue的對比,來實現標簽內部類似v-for循環,v-if等功能

前言&#xff1a;在vue中我們提供了很多標簽方法&#xff0c;比如用的比較多的v-for循環內容&#xff0c;v-if/v-show等判斷&#xff0c;可以直接寫在標簽中&#xff0c;大大提高了我們的開發效率&#xff0c;那么在react中有沒有類似的方法呢&#xff1f;我們這里來說一說。re…

PCB工藝-四層板制作流程(簡單了解下)

一&#xff09;流程&#xff1a;四層板的內層芯板&#xff0c;是由一張雙面覆銅板PP*2銅箔*2覆銅板蝕刻好線路&#xff0c;就是我們的芯板了PP全名叫半固化片&#xff0c;主體是玻璃纖維布環氧樹脂&#xff0c;是絕緣介質銅箔片&#xff0c;是單獨一張銅箔&#xff0c;很薄&…

無人機三維路徑規劃

文章目錄 1、引言 2、背景知識 3、核心算法 4、挑戰與優化 5、初始效果 6、需要改進地方 7、水平方向優化路線 8、垂直方向優化路線 9、與經過路線相交的網格都繪制出來 1、引言 介紹三維路徑規劃的定義和重要性:在無人機、機器人導航、虛擬現實等領域的應用。 概述文章目標和…

Spring-解決項目依賴異常問題

一.檢查項目的Maven路徑是否正確在確保新項目中的依賴在自己的電腦中已經存在的情況下&#xff1a;可以檢查項目的Maven路徑是否正確在拿到一個新項目時&#xff0c;要檢查這個項目的Maven路徑是自己電腦上設置好的Maven路徑嗎&#xff1f;如果不是&#xff0c;項目依賴會出問題…

系統設計——DDD領域模型驅動實踐

摘要本文主要介紹了DDD&#xff08;領域驅動設計&#xff09;在系統設計中的實踐應用&#xff0c;包括其在編碼規范、分層架構設計等方面的具體要求和建議。重點強調了應用層的命名規范&#xff0c;如避免使用模糊的Handler、Processor等命名&#xff0c;推薦使用動詞加業務動作…

開源衛星軟件平臺LibreCube技術深度解析

LibreCube技術深度解析&#xff1a;開源衛星軟件平臺的完整指南 LibreCube是一個專為CubeSat設計的模塊化開源衛星軟件平臺&#xff0c;它通過整合姿態控制、通信管理和任務調度等核心功能&#xff0c;為立方星開發者提供了完整的解決方案。本文將全面剖析LibreCube的技術架構…

React(四):事件總線、setState的細節、PureComponent、ref

React(四) 一、事件總線 二、關于setState的原理 1. setState的三種使用方式 (1)基本使用 (2)傳入一個回調 (3)第一個參數是對象,第二個參數是回調 2. 為什么setState要設置成異步 (1)提升性能,減少render次數 (2)避免state和props數據不同步 3. 獲取異步修改完數…

CPUcores-【硬核優化】CPU增強解鎖全部內核!可優化游戲性能、提升幀數!啟用CPU全內核+超線程,以更高優先級運行游戲!支持各種游戲和應用優化~

軟件介紹&#xff08;文末獲取&#xff09;CPUCores&#xff1a;游戲性能優化利器?這款工具&#xff0c;專為優化提升中低配電腦的幀數而生。其獨創的CPU資源調度技術&#xff0c;能讓老舊硬件煥發新生核心技術原理?采用「內核級隔離」方案&#xff0c;通過&#xff1a;系統進…

HQA-Attack: Toward High Quality Black-Box Hard-Label Adversarial Attack on Text

文本對抗性攻擊分為白盒攻擊和黑盒攻擊&#xff0c;其中黑盒攻擊更貼近現實&#xff0c;又可分為軟標簽和硬標簽設置&#xff0c;。這些名詞分別是什么意思 在文本對抗性攻擊中&#xff0c;“白盒攻擊”“黑盒攻擊”以及黑盒攻擊下的“軟標簽”“硬標簽”設置&#xff0c;核心差…

PyCharm性能優化與大型項目管理指南

1. PyCharm性能深度調優 1.1 內存與JVM配置優化 PyCharm基于JVM運行,合理配置JVM參數可顯著提升性能: # 自定義VM選項文件位置 # Windows: %USERPROFILE%\AppData\Roaming\JetBrains\<product><version>\pycharm64.exe.vmoptions # macOS: ~/Library/Applicat…

基于Java飛算AI的Spring Boot聊天室系統全流程實戰

在當今數字化時代&#xff0c;實時通訊已成為現代應用不可或缺的核心功能。從社交平臺到企業協作&#xff0c;從在線客服到游戲互動&#xff0c;實時聊天功能正以前所未有的速度滲透到各行各業。然而&#xff0c;開發一個功能完善的聊天室系統絕非易事——傳統開發模式下&#…

在 Conda 環境下編譯 C++ 程序時報錯:version `GLIBCXX_3.4.30‘ not found

報錯信息如下 ERROR:/root/SVF/llvm-16.0.4.obj/bin/clang: /opt/miniconda3/envs/py38/lib/libstdc.so.6: version GLIBCXX_3.4.30 not found (required by /root/SVF/llvm-16.0.4.obj/bin/clang)根據錯誤信息&#xff0c;問題是由于 Conda 環境中的libstdc.so.6缺少GLIBCXX_3…

vue+flask基于Apriori算法規則的求職推薦系統

文章結尾部分有CSDN官方提供的學長 聯系方式名片 文章結尾部分有CSDN官方提供的學長 聯系方式名片 關注B站&#xff0c;有好處&#xff01;編號&#xff1a;F069 基于Apriori關聯規則職位相似度的推薦算法進行職位推薦 基于決策樹、隨機森林的預測薪資 vueflaskmysql爬蟲 設計求…

機器學習第九課之DBSCAN算法

目錄 簡介 一、dbscan相關概念 二、dbscan的API 三、案例分析 1. 導入所需庫 2. 數據讀取與預處理 3. 數據準備 4. DBSCAN 參數調優 5. 確定最佳參數并應用 總結 簡介 本次我們將聚焦于一款極具特色的聚類算法 ——DBSCAN。相較于 K-means 等需要預先指定簇數量的算法…

給AI開一副“健忘藥”:Dropout如何治愈神經網絡的死記硬背癥

**——解讀《Dropout: A Simple Way to Prevent Neural Networks from Overfitting》**想象一位學生備考時&#xff0c;只反復背誦三套模擬題答案&#xff0c;卻在真正的考場上面對新題型束手無策——這種**死記硬背不會舉一反三**的問題&#xff0c;正是神經網絡中的“過擬合”…

【框架】跨平臺開發框架自用整理

Tauri 2.0 | Tauri https://github.com/tauri-apps/tauri 創建小型、快速、安全、跨平臺的應用程序 獨立于前端 將你現有的網絡技術棧帶到 Tauri 或開始新的項目。 Tauri 支持任何前端框架&#xff0c;所以你不需要改變你的技術棧。 跨平臺 使用單個代碼庫為 Linux、macOS、W…

web前端第三次作業

一、作業要求&#xff1a;使用js完成抽獎項目 效果和內容自定義&#xff0c;可以模仿游戲抽獎頁面二、代碼<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthde…

wrap cpp variant as dll for c to use

包裝c的variant給c用 variant_wrapper.cpp #include <variant> #include <unordered_map> #include <cstring> #include <cstdio> #include <new> #include <memory> #include <functional> #include <cstdlib>// 類型ID定義 …