2025牛客暑期多校訓練營3(FDJAEHB)

題目鏈接:牛客競賽_ACM/NOI/CSP/CCPC/ICPC算法編程高難度練習賽_牛客競賽OJ

F Flower

思路

可知當n<=a時無論怎么操作她都會離開

n%(a+b)是指進行完若干輪之后剩下的不足a+b個,如果是>a的話那么最后一輪必然不在a中,否則就摘掉n%(a+b)朵這樣就使得其位于b中

代碼

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;void solve(){int n,a,b;cin>>n>>a>>b;if(n<=a){cout<<"Sayonara\n";return;}int x=n%(a+b);if(x>a||x==0){cout<<"0\n";return;}cout<<x<<"\n";
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

D Distant Control

思路

只要有連續a個開機的我們將其設置成a個關機的之后再將這a個連同與其挨著的關機的一個,即將a+1設置成開機的,如此循環就能夠將所有的都設置成開機的

所以結論即為若是有連續不低于a個開機的或者有連續不低于a+1個關機的,就一定能使得所有的都開機

代碼

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;void solve(){int n,a;cin>>n>>a;string s;cin>>s;s=" "+s;int cnt1=0;int cnt0=0;int mx1=0,mx0=0;int ct=0;for(int i=1;i<=n;i++){if(s[i]=='1'){ ct++;cnt1++;cnt0=0;}else{cnt1=0;cnt0++;}mx1=max(mx1,cnt1);mx0=max(mx0,cnt0);}if(mx1>=a||mx0>=a+1){cout<<n<<"\n";}else{cout<<ct<<"\n";}
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

J Jetton

思路

可以證明若游戲會結束那么輪數不會超過log2(x+y),直接模擬即可

此外,容易證明游戲能在有 限回合內結束,答案為x+y / gcd(x,y) 是 2 的正整數次冪

代碼

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;void solve(){int x,y;cin>>x>>y;int g=__gcd(x,y);int t=(x+y)/g;for(int i=0;i<=32;i++){if(t==(1ll<<i)){cout<<i<<"\n";return;}}cout<<"-1\n";
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

A Ad-hoc Newbie

思路

賽時沒注意到保證對每個i都有1 ≤ fi ≤ i 這句加重的話導致根本沒有思路,最后還是靠隊友解出來的

我們行和列其實是對稱的所以我們只需要填好一半即可,在構造時我們對于第i列來說我們將后i行添入比i大的數即可

一個可行的構造方法是對于第i行來說 2 3 ... i 0 1這樣保證了此行的mex值為n

當f[i]=x(x<n)時我們只需要將x換成n即可

代碼

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;void solve(){int n;cin>>n;vi f(n+1);for(int i=1;i<=n;i++){cin>>f[i];}vector<vector<int>> ans(n+1,vi(n+1));for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){if(j==i) ans[i][j]=1;else if(j==i-1) ans[i][j]=0;else ans[i][j]=j+1;}}if(f[1]==1) ans[1][1]=0;for(int i=2;i<=n;i++){if(f[i]==i) continue;if(f[i]==1) ans[i][i]=i;else if(f[i]==0) ans[i][i-1]=i;else ans[i][f[i]-1]=i;}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){ans[i][j]=ans[j][i];}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<<ans[i][j]<<" ";}cout<<"\n";}
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

E Equal

思路

發現當n為奇數時我們總能將所有的a進行乘法來使得所有的a相等,所以n為奇數時輸出yes

偶數時(特判n=2)我們要對其進行質因數分解,如果出現的次數都是偶數次則輸出yes,否則輸出no

代碼

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=5e6+10;
const int mod=1e9+7;vector<int> minp,primes;
void sieve(int n){minp.assign(n+1,0);primes.clear();for(int i=2;i<=n;i++){if(minp[i]==0){minp[i]=i;primes.push_back(i);}for(auto p:primes){if(i*p>n){break;}minp[i*p]=p;if(p==minp[i]){break;}}}
}
bool isprime(int n){return minp[n]==n;
}int lcm(int x,int y){return x*y/__gcd(x,y);
}void solve(){int n;cin>>n;vi a(n+1);for(int i=1;i<=n;i++){cin>>a[i];}if(n==2){if(a[1]==a[2]){cout<<"Yes\n";}else{cout<<"No\n";}return;}if(n%2){cout<<"Yes\n";return;}unordered_map<int,int> cnt;auto cal=[&](int tmp){for(int i=0;i<primes.size();i++){while((tmp!=1)&&(tmp%primes[i]==0)){tmp/=primes[i];cnt[primes[i]]++;}if(isprime(tmp)){cnt[tmp]++;break;}if(tmp==1) break;}};for(int i=1;i<=n;i++){cal(a[i]);}for(auto [i,t]:cnt){if(t%2){cout<<"No\n";return;}}cout<<"Yes\n";}
signed main() {vcoistntcout<<fixed<<setprecision(2);sieve(N);int _=1;cin>>_;while(_--) solve();return 0;
}

H Head out to the Target

思路

轉化題意,維護一個可達集合,每個時刻對于目標節點u,選擇集合中距離u最近的節點,往u移動r-l+1步若能到達則輸出此時的時刻,無法到達將r-l+1步走過的點加入到集合里面

找到最近的集合里的點可以用倍增找,加入到集合里面的過程可以暴力

代碼

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=1e6+10;
const int inf=1e18;
const int mod=998244353;int st[N][35],f[N];
vector<vi> e(N);
int n,k;
bool vis[N]={false};struct node{int u,l,r;
}q[N];
bool cmp(node x,node y){return x.l<y.r;
}void init(){vis[1]=true;vis[0]=true;for(int p=1;(1<<p)<=n;p++){for(int i=1;i<=n;i++){st[i][p]=st[st[i][p-1]][p-1];}}
}pll jamp(int x){int cnt=0;for(int p=30;p>=0;p--){if(!vis[st[x][p]]){x=st[x][p];cnt+=(1<<p);}}return {st[x][0],cnt+1};
}void solve(){cin>>n>>k;for(int i=2;i<=n;i++){cin>>f[i];st[i][0]=f[i];e[f[i]].push_back(i);}init();for(int i=1;i<=k;i++){cin>>q[i].u>>q[i].l>>q[i].r;}sort(q+1,q+1+k,cmp);for(int i=1;i<=k;i++){auto [x,cnt]=jamp(q[i].u);int now=q[i].r-q[i].l+1;if(now>=cnt){cout<<q[i].l+cnt-1<<"\n";return;}int y=q[i].u;int res=cnt-now;while(y!=x){if(res>0) res--;y=f[y];if(res==0) vis[y]=true;}}cout<<"-1\n";
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;// cin>>_;while(_--) solve();return 0;
}

B Bitwise Puzzle

思路

明顯a,b為0時特判

操作次數不超過64,意味著每次對二進制某一位進行修改平均次數為2,也就是說可以將a或者b某一個改成c,另一個改成0,最后a與b異或一次得到全部相等

注意到我們可以拿b的最高位1來對a進行修改,所以我們在開始時將a與b進行異或,使其最高位1的位置相同,假設用hx表示x的最高位1的位置,此時ha=hb

1.ha>=hc

我們可以用b來不斷修改a,b不斷右移直到a改成c,b變成0,我們進行b=b xor a操作,將b變成a

2.ha<hc

我們依然用b來不斷修改a,此時我們要把a變成c的前綴部分,b變成1,之后將a不斷左移,用1來修改a的最后一位將其變成c,最后將b變成0后與a異或,變成a

可以發現其操作次數是不會超過64的

代碼

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
// #define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;int h(int x){if(x==0) return 0;return 32-__builtin_clz(x);
}
int g(int x,int k){return (x>>(k-1))&1;
}void solve(){int a,b,c;cin>>a>>b>>c;if(a==0&&b==0){if(c>0) cout<<"-1\n";else cout<<"0\n";return;}vi ans;if(h(a)>h(b)){ans.push_back(4);b^=a;}if(h(a)<h(b)){ans.push_back(3);a^=b;}while(h(b)>h(c)){if(g(a,h(b))){ans.push_back(3);a^=b;}ans.push_back(2);b/=2;}if(h(a)<h(b)) ans.push_back(3),a^=b;for(int i=h(a),j=h(c);i>=1;i--,j--){if(g(a,i)!=g(c,j)){ans.push_back(3);a^=b;}ans.push_back(2);b/=2;}ans.pop_back();b=1;for(int i=(h(c)-h(a));i>=1;i--){ans.push_back(1);a*=2;if(g(c,i)){ans.push_back(3);a^=b;}}ans.push_back(2);b/=2;ans.push_back(4);b^=a;// cout<<a<<" "<<b<<" "<<c<<"\n";cout<<ans.size()<<"\n";for(int x:ans){cout<<x<<" ";}cout<<"\n";}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

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

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

相關文章

【KO】 Android基礎

以下是對這些 Android 相關問題的解答: 1. Activity 與 Fragment 之間常見的幾種通信方式 接口回調:Fragment 定義接口,Activity 實現該接口,Fragment 通過接口實例調用方法傳遞數據 。 使用 Bundle:Fragment 可通過 setArguments(Bundle) 傳數據給自身,Activity 可在創…

Gradle構建工具教程:由來與發展史(版本演進與未來優勢)

一、Gradle簡介Gradle是一個基于Apache Ant和Apache Maven概念的項目自動化構建開源工具&#xff0c;使用基于Groovy的領域特定語言&#xff08;DSL&#xff09;聲明項目設置。相較于傳統XML配置&#xff0c;這種DSL使構建腳本更簡潔易讀。Gradle支持Java、Groovy、Kotlin、Sca…

@Rancher簡介部署使用 - Docker Compose

Rancher 安裝和使用介紹 - Docker Compose 文章目錄Rancher 安裝和使用介紹 - Docker Compose1. Rancher 簡介1.1 什么是 Rancher1.2 Rancher 核心功能1.3 Rancher 架構2. 安裝前準備2.1 系統要求2.2 環境準備3. 使用 Docker Compose 安裝 Rancher3.1 創建 Docker Compose 文件…

程序員接私活的一些平臺和建議,千萬要注意,別掉坑里!

關于程序員接私活&#xff0c;社會各界說法不一&#xff0c;如果你確實急用錢&#xff0c;價格又合適&#xff0c;那就去做。 不過&#xff0c;私活也沒有那么好做&#xff0c;一般私活的性價比遠比上班拿工資的低。但是作為一個額外的收益渠道&#xff0c;一部分生活窘迫的程序…

多輪問答與指代消解

目錄引言一、LangChain是怎么實現的多輪問答1、記憶模塊&#xff08;Memory&#xff09;管理對話歷史?2、對話鏈&#xff08;Conversational Chain&#xff09;架構?3、智能體&#xff08;Agent&#xff09;決策機制?4、上下文感知的Prompt工程?5、RAG&#xff08;檢索增強…

文件IO、文件IO與標準IO的區別

一、文件IO --->fd&#xff08;文件描述符&#xff09;打開文件open讀、寫文件read/write關閉文件close#include <sys/types.h>#include <sys/stat.h>#include<fcntl.h>文件描述符&#xff1a;操作系統中已打開文件的標識符。小的、非負的整形數據范圍&am…

【模型剪枝2】不同剪枝方法實現對 yolov5n 剪枝測試及對比

目錄 一、背景 二、剪枝 1. Network Slimming 1.0 代碼準備 1.1 稀疏化訓練 1.2 剪枝 1.3 微調 1.4 測試總結 2. Torch Pruning&#xff08;TP&#xff09; 2.1 MagnitudePruner 2.1.1 剪枝 2.1.2 retrain 2.1.3 測試總結 2.2 SlimmingPruner 2.2.1 定義重要性評…

AI入門學習--AI模型評測

一、AI模型評測目標傳統質量主要關注功能、性能、安全、兼容性等。 AI模型評測在此基礎上,引入了全新的、更復雜的評估維度: 1.性能/準確性:這是基礎,在一系列復雜的評測基準上評價個性能指標。 2.安全性:模型是否可能被用于惡意目的?是否會生成有害、違法或有毒的內容?是否容…

nt!MmCreatePeb函數分析之peb中OSMajorVersion的由來

第一部分&#xff1a;NTSTATUS MmCreatePeb (IN PEPROCESS TargetProcess,IN PINITIAL_PEB InitialPeb,OUT PPEB *Base) {PPEB PebBase;PebBase->OSMajorVersion NtMajorVersion;PebBase->OSMinorVersion NtMinorVersion;PebBase->OSBuildNumber (USHORT)(NtBuildN…

Unity TimeLine使用教程

1.概述 Timeline 是一個基于時間軸的序列化編輯工具&#xff0c;主要用于控制游戲或動畫中的 過場動畫&#xff08;Cutscenes&#xff09;、劇情事件、角色動畫混合、音頻控制 等。它類似于視頻編輯軟件&#xff08;如 Adobe Premiere&#xff09;的時間線&#xff0c;但專門針…

數據分析基本內容(第二十節課內容總結)

1.pd.read_csv(一個文件.csv)&#xff1a;從本地文件加載數據&#xff0c;返回一個 DataFrame 對象&#xff0c;這是 pandas 中用于存儲表格數據的主要數據結構2.df.head()&#xff1a;查看數據的前五行&#xff0c;幫助快速了解數據的基本結構和內容3.df.info()&#xff1a;查…

2025年最新原創多目標算法:多目標酶作用優化算法(MOEAO)求解MaF1-MaF15及工程應用---盤式制動器設計,提供完整MATLAB代碼

一、酶作用優化算法 酶作用優化&#xff08;Enzyme Action Optimizer, EAO&#xff09;算法是一種2025年提出的新型仿生優化算法&#xff0c;靈感源于生物系統中酶的催化機制&#xff0c;發表于JCR 2區期刊《The Journal of Supercomputing》。其核心思想是模擬酶與底物的特異性…

用 COLMAP GUI 在 Windows 下一步步完成 相機位姿估計(SfM) 和 稀疏點云重建的詳細步驟:

使用 COLMAP GUI 進行 SfM 和稀疏點云重建的步驟1. 打開 COLMAP GUI運行 colmap.bat&#xff0c;會彈出圖形界面。2. 新建項目&#xff08;或打開已有項目&#xff09;點擊菜單欄的 File > New Project&#xff0c;選擇一個空文件夾作為項目目錄&#xff08;建議新建一個空目…

天線設計 介質材料PEC和FR4有什么區別嗎

在電磁仿真&#xff08;包括 CST 中&#xff09;&#xff0c;PEC 和 FR4 是兩種完全不同的材料類型&#xff0c;主要區別如下&#xff1a;材料性質&#xff1a;PEC&#xff08;Perfect Electric Conductor&#xff0c;理想電導體&#xff09;&#xff1a;是一種理論上的理想材料…

mysql鎖+索引

mysql鎖按鎖的粒度分類表級鎖&#xff08;Table - level locks&#xff09;特點&#xff1a;對整張表進行鎖定&#xff0c;實現簡單&#xff0c;加鎖和釋放鎖的速度快&#xff0c;但并發度較低。當一個事務對表加表級鎖后&#xff0c;其他事務對該表的讀寫操作都可能被阻塞。應…

計算機視覺CS231n學習(7)

可視化和理解 這里主要是對CNN中間的層的結果可視化濾波器可視化 直接可視化網絡各層的濾波器權重&#xff0c;高層濾波器的可視化結果趣味性較低&#xff0c;而底層濾波器通常對應邊緣、紋理等基礎視覺特征 &#xff08;“高層濾波器” 通常指的是網絡中靠后的卷積層所包含的濾…

OpenBMC中工廠模式的簡明工作流程解析

本文將以最簡單直接的方式&#xff0c;從零開始講解OpenBMC中工廠模式的完整工作流程&#xff0c;包括從設計到使用的全生命周期。 1. 工廠模式最簡示例 我們先從一個最基礎的工廠模式實現開始&#xff1a; // 產品接口 class GpioPin { public:virtual void setValue(bool val…

解決:Error updating changes: detected dubious ownership in repository at

在通過 Git Bash 提交項目代碼時輸入 git add . 命令后&#xff0c;報錯&#xff1a;Error updating changes: detected dubious ownership in repository at ...這是因為 該項目的所有者 與 現在的用戶 不一致 比如說&#xff1a; 該項目的所有者是 Administrator&#xff0c;…

DataEase V2 社區版安裝部署

參考&#xff1a;使用外置 MySQL 部署 DataEase v2 - FIT2CLOUD 知識庫 一、下載安裝包 開源社區 - FIT2CLOUD 飛致云 選擇社區版下載 下載后上傳到 linux 的目錄 &#xff08;要求至少200G&#xff09; 二、在MySQL8中創建數據庫 # 創建DataEase庫 CREATE DATABASE datae…

nginx高性能web服務器

web服務基礎介紹 一、Web服務核心流程 #mermaid-svg-NCj4hbRIvvgMXmcK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NCj4hbRIvvgMXmcK .error-icon{fill:#552222;}#mermaid-svg-NCj4hbRIvvgMXmcK .error-text{fil…