暑期訓練8

E. G-C-D, Unlucky!

題目要求

判斷是否存在一個長度為 n 的數組 a,使得

  • p[i]a[0..i] 的前綴 GCD

  • s[i]a[i..n-1] 的后綴 GCD

思路

前綴 GCD 非遞增

后綴 GCD 非遞減

首尾 GCD 一致

橋梁條件成立

  • 對于每個位置 igcd(p[i], s[i+1]) 必須等于整個數組的 GCD(即 s[0])。

  • 這一步是構造合法中間元素 a[i] 的必要條件

全部滿足 → 輸出 YES,否則 NO

代碼

#include<bits/stdc++.h>
using namespace std;
void solve(){long long n;cin>>n;vector<long long>p(n);vector<long long>s(n);for(int i=0;i<n;i++)cin>>p[i];for(int i=0;i<n;i++)cin>>s[i];if(p[n-1]!=s[0]){  //if(p.back()!=s[0])cout<<"NO"<<endl;return;}for(int i=1;i<n;i++){if(p[i-1]%p[i]&&i-1>=0){cout<<"NO"<<endl;return;}}for(int i=n-2;i>=0;i--){if(s[i+1]%s[i]&&i+1<n){cout<<"NO"<<endl;return;}}for(int i=0;i<n-1;i++){if(__gcd(p[i],s[i+1])!=s[0]){cout<<"NO"<<endl;return;}}cout<<"YES"<<endl;
}
int main(){long long t;cin>>t;while(t--){solve();}return 0;
}

C. I Will Definitely Make It

本題要求

判斷能否在水位不斷上漲的情況下,從初始塔出發,通過多次傳送最終到達最高的塔

思路

  1. 排序塔高度
    將所有塔按高度升序排序,方便后續貪心處理。

  2. 找到初始塔位置
    在排序后的數組中找到初始塔的高度 x 所在的位置 m

  3. 快速判斷邊界情況

    • 如果最高塔與初始塔的高度差 ≤ 初始塔高度(h[n] - x ≤ x),可以直接傳送到最高塔,輸出 YES

    • 如果初始塔的下一個塔就比初始塔高太多(h[m+1] - x > x),第一步就無法傳送,直接輸出 NO

  4. 貪心驗證后續跳躍

    • 從初始塔 x 開始,依次向后檢查是否能“逐級跳躍”到最高塔。

    • 每次跳躍的代價是 h[i] - x,累計代價不能超過當前塔高度 x

    • 每次跳躍后,更新基準高度 x = h[i](重置起點),繼續向后驗證。

代碼

#include<bits/stdc++.h>
using namespace std;
void solve(){long long n,k;cin>>n>>k;long long h[n+1];for(int i=1;i<=n;i++)cin>>h[i];int x=h[k];sort(h+1,h+n+1);int m;for(int i=1;i<=n;i++){if(h[i]==x)m=i;}if(h[n]-x<=x){cout<<"YES"<<endl;return;}else if(h[m+1]-x>x){cout<<"NO"<<endl;return;}else{bool flag=1;int c=0;for(int i=m+1;i<=n;i++){c+=h[i]-x;   //易錯點,這里是比較時間,一定是累計時間總和,千萬不要直接if(c<=x)x=h[i];   //用h[i]-x<=x來判斷,雖然樣例過了,但實際上邏輯一點不對else{cout<<"NO"<<endl;flag=0;break;}}if(flag)cout<<"YES"<<endl;}
}
int main(){long long t;cin>>t;while(t--)solve();return 0;
}

D. This Is the Last Time

題目要求

n 家賭場,第 i 家給出 (l_i, r_i, real_i),當前硬幣數 k 必須滿足 l_i ≤ k ≤ r_i 才能進入第 i 家賭場,進入后硬幣數立即變成 real_i每家賭場只能去一次,順序可以任意,最多 能帶走的硬幣數。

思路

先把所有賭場按“門檻”從小到大排好,然后從左到右掃一遍:只要當前手里的錢 k 夠得著某家賭場,并且進去后錢會更多,就立刻進去把錢換成更大的 real_i;掃完一遍后手里的錢就是最大可能值。

代碼

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
struct node{long long l,r,re;
}p[N];
bool cmp(node x,node y){if(x.l==y.l)return x.r<y.r;return x.l<y.l;
}
void solve(){long long n,k;cin>>n>>k;for(int i=0;i<n;i++){cin>>p[i].l>>p[i].r>>p[i].re;}sort(p,p+n,cmp);for(int i=0;i<n;i++){if(k>=p[i].l&&k<=p[i].r&&k<p[i].re){k=p[i].re;}}cout<<k<<endl;
}
int main(){int t;cin>>t;while(t--)solve();return 0;
}

F. 1-1-1, Free Tree!

題目要求

給定一棵 n 個點的無根樹,每條邊連接 (u,v) 并有一個權值 c,每個頂點有一個顏色 a[i]。
邊權規則:

  • 如果兩端顏色相同,這條邊對總代價貢獻 0;

  • 不同則貢獻 c。

接下來有 q 次查詢:
每次給出 (u, x) —— 把頂點 u 的顏色改成 x,每次改色后,輸出整棵樹當前的總代價,顏色變化會累計,查詢之間互相關聯。

思路

  1. 建立樹結構
    用鄰接表存無向邊。

  2. 預處理:DFS 把無向樹變成“以 1 為根的有根樹”
    ? 記錄每個節點 u 的父節點 fa[u] 以及到父節點的邊權 c[u]。
    ? 同時計算初始總代價 ans:對于每條樹邊 (u,fa[u]),若 a[u] ≠ a[fa[u]],就把 c[u] 累進 ans。
    ? 用 map<int,int> mp[u] 記錄“u 的所有子節點中顏色為 col 的邊權和”,方便后面 O(log deg(u)) 批量更新。

  3. 處理查詢
    對于每次 (u, x):
    ? 若 x == a[u],顏色無變化,直接輸出當前 ans。
    ? 否則:

    1. 處理父邊:
      – 若 u 不是根,判斷原來 u 與父節點顏色是否相同。
      – 同色→不同色:ans += c[u](原來貢獻 0,現在貢獻 c[u])。
      – 不同色→同色:ans -= c[u](原來貢獻 c[u],現在貢獻 0)。
      – 在父節點的 mp 表中把舊顏色減、新顏色加。

    2. 處理子邊:
      – 原來與 u 同色→不同色:把 mp[u][old] 全部加回 ans。
      – 原來與 u 不同色→同色:把 mp[u][new] 全部減掉。

    3. 真正更新 a[u] = x,并輸出 ans。

代碼

#include<bits/stdc++.h>
#define int long long
using namespace std;typedef pair<int,int> PII;
const int N=2e5+10;/* ---------- 全局變量 ---------- */
int n,q,a[N];                   // a[i]: 節點 i 的當前顏色
map<int,int> mp[N];             // mp[u][col]: 節點 u 的所有子節點中顏色為 col 的邊權和
vector<PII> g[N];               // 鄰接表: g[u] = {v,w}
int ans;                        // 整棵樹當前總邊權和
int fa[N],c[N];                 // fa[i]: i 的父節點  c[i]: i 到父節點的邊權/* ------------------------------------------------------------------*  dfs(u): 以 u 為根向下遍歷*  1. 建立父子關系*  2. 計算初始 ans*  3. 填充 mp[u][col] 方便后續查詢* ------------------------------------------------------------------ */
void dfs(int u) {for (size_t i = 0; i < g[u].size(); ++i) {int v = g[u][i].first;int w = g[u][i].second;if (v == fa[u]) continue;   // 不往回走fa[v] = u;                  // 記錄父節點c[v]  = w;                  // 記錄到父節點的邊權if (a[v] != a[u]) ans += w; // 兩端顏色不同 → 產生代價mp[u][a[v]] += w;           // 把這條邊掛到父節點的“子邊表”dfs(v);                     // 繼續向下}
}/* ------------------------------------------------------------------*  主邏輯:讀入 → 建樹 → 預處理 → 處理每個查詢* ------------------------------------------------------------------ */
void solve() {cin >> n >> q;ans = 0;/* ---------- 清空上一組數據 ---------- */for (int i = 1; i <= n; ++i) {fa[i] = -1;g[i].clear();mp[i].clear();c[i] = 0;}/* ---------- 讀入顏色 ---------- */for (int i = 1; i <= n; ++i) cin >> a[i];/* ---------- 讀入 n-1 條無向邊 ---------- */for (int i = 1; i < n; ++i) {int u, v, w;cin >> u >> v >> w;g[u].push_back(make_pair(v, w));g[v].push_back(make_pair(u, w));}/* ---------- 以 1 為根做 DFS,建立父子關系并算初始答案 ---------- */dfs(1);/* ---------- 處理每個查詢 ---------- */while (q--) {int u, x;               // 把頂點 u 的顏色改成 xcin >> u >> x;if (a[u] == x) {        // 顏色沒變?直接輸出cout << ans << '\n';continue;}/* 1. 先處理 u 與父節點之間的邊 */if (fa[u] != -1) {int w = c[u];       // u 到父節點的邊權// 原來同色 → 現在不同色:要加 wif (a[u] == a[fa[u]]) ans += w;// 原來不同色 → 現在同色:要減 wif (x == a[fa[u]]) ans -= w;/* 更新父節點的 mp 表:舊顏色減,新顏色加 */mp[fa[u]][a[u]] -= w;mp[fa[u]][x]    += w;}/* 2. 再處理 u 與其所有子節點之間的邊 */// 原來同色 → 現在不同色:把子邊全加回來if (mp[u].count(a[u])) ans += mp[u][a[u]];// 原來不同色 → 現在同色:把子邊全減掉if (mp[u].count(x))    ans -= mp[u][x];/* 3. 真正修改顏色 */a[u] = x;/* 4. 輸出更新后的總邊權和 */cout << ans << '\n';}
}/* ---------- 主函數:多組數據 ---------- */
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T;cin >> T;while (T--) solve();return 0;
}

A Only One Digit

代碼

#include<bits/stdc++.h>
using namespace std;
void solve(){int x;cin>>x;int mn=10;while(x){mn=min(mn,x%10);x/=10;}cout<<mn<<endl;
}
int main(){int t;cin>>t;while(t--)solve();return 0;
}

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

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

相關文章

深入解析Hadoop HDFS高可用性:原理、故障切換與元數據同步

Hadoop HDFS高可用性(HA)概述在分布式存儲領域&#xff0c;Hadoop分布式文件系統(HDFS)作為Hadoop生態系統的核心存儲組件&#xff0c;其高可用性(HA)設計一直是架構師們關注的焦點。傳統HDFS架構中&#xff0c;NameNode作為單一主節點管理整個文件系統的元數據&#xff0c;這種…

Freertos源碼分析:任務創建/刪除

任務創建/刪除流程1.簡介FreeRTOS 中任務創建通過 xTaskCreate() 或 xTaskCreateStatic() 實現。動態創建&#xff08;xTaskCreate&#xff09;會自動分配任務棧和TCB&#xff08;任務控制塊&#xff09;&#xff0c;靜態創建&#xff08;xTaskCreateStatic&#xff09;需用戶預…

warning: _close is not implemented and will always fail

相關問題&#xff1a; 一、undefined reference to _exit undefined reference to ‘end‘ warning: _close is not implemented and will always fail 一、環境&#xff1a; ubuntu24.04實體機、 arm-none-eabi-gcc gcc version 13.2.1 20231009 (15:13.2.rel1-2) 二…

MyBatis之緩存機制詳解

MyBatis之緩存機制詳解一、MyBatis緩存的基本概念1.1 緩存的核心價值1.2 MyBatis的兩級緩存體系二、一級緩存&#xff08;SqlSession級別緩存&#xff09;2.1 工作原理2.2 實戰案例&#xff1a;一級緩存演示2.2.1 基礎用法&#xff08;默認開啟&#xff09;2.2.2 一級緩存失效場…

云服務器搭建自己的FRP服務。為什么客戶端的項目需要用Docker啟動,服務端才能夠訪問到?

簡單回答&#xff1a;在云服務器搭建FRP服務時&#xff0c;客戶端項目用Docker啟動并非必需&#xff0c;而是因為Docker的特性簡化了配置&#xff1a; Docker通過端口映射&#xff08;如-p 本地端口:容器端口&#xff09;能固定項目對外暴露的端口&#xff0c;減少本地端口沖突…

6 STM32單片機的智能家居安防系統設計(STM32代碼+手機APP設計+PCB設計+Proteus仿真)

系列文章目錄 文章目錄 系列文章目錄前言1 資料獲取與演示視頻1.1 資料介紹1.2 資料獲取1.3 演示視頻 2 系統框架3 硬件3.1 主控制器3.2 顯示屏3.3 WIFI模塊3.4 DHT11溫濕度傳感器3.5 煙霧/燃氣傳感器模塊&#xff1a;MQ-23.6 火焰傳感器3.7 門磁模塊MC-38 4 設計PCB4.1 安裝下…

DevOps落地的終極實踐:8大關鍵路徑揭秘!

本文來自騰訊藍鯨智云社區用戶: CanWay當前&#xff0c;DevOps因其能夠降低IT運營成本、提高軟件質量并加快上市時間的能力而在全球范圍內引起廣泛關注。它打破了傳統軟件開發與運營的界限&#xff0c;消除了新功能發布延遲和軟件質量下降的障礙。DevOps通過實施持續集成、持續…

react - 根據路由生成菜單

后端返回菜單的格式menuList:[{index: true,name: "",component: "../views/Home",meta: { title: "首頁", requiresAuth: true,roles:[user]},},{path: "/admin",name: "admin",meta: { title: "管理頁", roles:…

Window延遲更新10000天配置方案

1.點擊"開始"菜單&#xff0c;搜索"注冊表編輯器"&#xff0c;點擊"打開"。2.找到"\HKEY LOCAL MACHINE\SOFTWARE\Microsoft\WindowsUpdate\Ux\Settings"路徑。3.右面空白處右鍵新建一個32位值&#xff0c;命名為FlightSettingsMaxPau…

【OD機試】人民幣轉換

題目描述 將阿拉伯數字金額轉換為中文大寫金額格式,需遵循以下規則: 1、 前綴要求:中文大寫金額前必須標明“人民幣”字樣。 2、 用字規范:使用壹、貳、叁、肆、伍、陸、柒、捌、玖、拾、佰、仟、萬、億、元、角、分、零、整等字樣。 3、 “整”字規則: 金額到“元”為止…

在ajax中什么時候需要將返回值類型做轉換

$.ajax({url: TMSPROC0050/deleteData?accidentIds accidentIds.join(,),type: DELETE,dataType: json,success: function(result) {$(#accidentGrid).datagrid(reload);$.messager.show({title: 成功,msg: result.message})},error: function(result) {$.messager.alert({ti…

Helm常用命令大全(2025最新版)

文章目錄Helm常用命令大全&#xff08;2025最新版&#xff09;一、基礎命令與環境配置版本與幫助信息安裝與升級HelmLinux系統安裝版本升級注意事項二、倉庫管理命令倉庫基礎操作OCI倉庫支持&#xff08;v3.8新特性&#xff09;三、Chart操作命令Chart創建與打包Chart搜索與下載…

gitlab+jenkins

文章目錄架構gitlab和jenkins安裝jenkins配置gitlab配置jenkins與gitlab聯動參考架構 gitlab和jenkins安裝 部署docker 部署jenkins 啟動jenkins 用戶&#xff1a;admin&#xff0c;對應的密碼如下 點擊安裝自定義推薦的插件 安裝gitlab插件 jenkins配置 配置pipline…

Redis字符串操作指南:從入門到實戰應用

Redis作為一款高性能的鍵值存儲數據庫&#xff0c;其字符串&#xff08;String&#xff09;類型是最基礎也最常用的數據類型。它不僅能存儲簡單的文本信息&#xff0c;還能應對數字計算、二進制數據等多種場景&#xff0c;靈活且高效。接下來&#xff0c;我們就全方位剖析Redis…

SQLite 數據庫字段類型-詳細說明,數據類型詳細說明。

SQLite 數據類型 SQLite字段類型詳細說明&#xff0c;包含存儲類、親和類型、布爾類型、日期時間類型的存儲方式、取值范圍及核心特性。 創建 SQLite3 表時可使用的各種數據類型名稱&#xff0c;同時也介紹了相應的親和類型。 一、核心存儲類&#xff08;Storage Classes&am…

Node.js特訓專欄-實戰進階:17.會話管理與安全存儲

?? 歡迎來到 Node.js 實戰專欄!在這里,每一行代碼都是解鎖高性能應用的鑰匙,讓我們一起開啟 Node.js 的奇妙開發之旅! Node.js 特訓專欄主頁 專欄內容規劃詳情 會話管理與安全存儲:從原理到實戰的Web安全實踐 在Web應用中,會話(Session)是維持用戶狀態的核心機制—…

【橘子分布式】gRPC(編程篇-中)

一、簡介 我們之前已經完成了對于api模塊的開發&#xff0c;也就是已經生成了基礎的類和對應的接口&#xff0c;現在我們需要完成的是client和server端的開發。其實如同thrift一樣&#xff0c;現在要做的就是實現我們之前定義的service里面的hello方法&#xff0c;里面寫我們的…

Spring Boot 項目中數據同步之binlog和MQ

在 Spring Boot 項目中&#xff0c;“監聽 binlog” 和 “業務代碼中集成 MQ” 是實現數據同步、事件驅動的兩種主流方法。 簡單來說&#xff0c;這個選擇可以概括為&#xff1a; 監聽 Binlog (如使用 Canal)&#xff1a;像一個數據庫的貼身秘書&#xff0c;它忠實地記錄數據庫…

MySQL 寫入性能優化全攻略(附 GitHub 面試題項目鏈接)

面試中你可能會遇到這樣的問題&#xff1a; &#x1f4ac; “假設你的接口一天收到百萬級請求&#xff0c;MySQL 撐得住嗎&#xff1f;你會怎么優化寫入性能&#xff1f;” 剛開始我也懵過&#xff0c;后來不斷復盤與總結&#xff0c;現在我可以用結構化方式給出一個相對完整的…

用Dynamic chunk去干掉tokenizer?

一般你們下AR模型的時候&#xff0c;都有這個&#xff0c;也就是tokenzier&#xff0c;tokenizer是干啥的&#xff0c;其實就是你的分詞字典不光有specal的token對應的還有實際的對應的分詞對應的代碼&#xff0c;比如&#xff1a;也有tokenzier沒顯示的&#xff0c;比如&#…