2024.3.4訓練記錄(8)

文章目錄

  • CF 459D Pashmak and Parmida's problem
  • CF 1388C Uncle Bogdan and Country Happiness
  • CF 1525D Armchairs
  • CF 220B Little Elephant and Array

CF 459D Pashmak and Parmida’s problem

題目鏈接

最近感覺對數據結構題的反應度提升了,這一題是上午看的但是當時旁邊沒電腦,傍晚這會兒可能思路就出現了點偏差,想到了樹狀數組+前綴,應該是能獨立寫出來的一道題

正著反著各跑一遍前綴和,記錄下每個數是第幾次出現,把反著跑的結果存到樹狀數組里,之后遍歷原數組,答案每次加上當前數后方的出現次數比當前數小的個數

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;const int N = 1e6 + 10;
const int mod = 998244353;
const int maxn = 1e6 + 10;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;int tr[N];int lowbit(int x)
{return x & -x;
}void add(int pos, int x)
{for (int i = pos; i < N; i += lowbit(i)) tr[i] += x;
}int query(int pos)
{int res = 0;for (int i = pos; i > 0; i -= lowbit(i)) res += tr[i];return res;
}void solve()
{int n, ans = 0;cin >> n;vector<int> a(n);for (int i = 0; i < n; i ++ ) cin >> a[i];map<int, int> mp;vector<int> pre(n), back(n);for (int i = 0; i < n; i ++ ){mp[a[i]] ++ ;pre[i] = mp[a[i]];}mp.clear();for (int i = n - 1; i >= 0; i -- ){mp[a[i]] ++ ;back[i] = mp[a[i]];}for (int i = 0; i < n; i ++ ) add(back[i], 1);for (int i = 0; i < n; i ++ ){add(back[i], -1);ans += query(pre[i] - 1);}cout << ans << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while (t -- ){solve();}
}

CF 1388C Uncle Bogdan and Country Happiness

題目鏈接

也是上午看的一道題,思路非常正確,但還是經不住暈遞歸,調了很久,賽時看不到錯誤數據估計要調更久,唉

先dfs算一下每個點有多少人經過,然后再dfs給每個點分配開心的人數,如果有一個點不能分配就no,否則yes

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;const int N = 1e6 + 10;
const int mod = 998244353;
const int maxn = 1e6 + 10;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n, m;cin >> n >> m;vector<int> p(n + 1), h(n + 1);for (int i = 1; i <= n; i ++ ) cin >> p[i];for (int i = 1; i <= n; i ++ ) cin >> h[i];vector<vector<int>> g(n + 1);for (int i = 0; i < n - 1; i ++ ) {int x, y;cin >> x >> y;g[x].push_back(y);g[y].push_back(x);}vector<int> pass(n + 1); // 每個點經過多少人function<void(int, int)> dfs1 = [&](int u, int fa){for (int i = 0; i < g[u].size(); i ++ ){int j = g[u][i];if (j == fa) continue;dfs1(j, u);pass[u] += pass[j];}pass[u] += p[u];};dfs1(1, -1);function<bool(int, int, int)> dfs2 = [&](int u, int fa, int ha){for (int i = 0; i < g[u].size(); i ++ ){int j = g[u][i];if (j == fa) continue;if ((h[j] < 0 && h[j] >= -pass[j]) || (h[j] >= 0 && h[j] <= pass[j])){if ((h[j] + pass[j]) % 2 != 0) return false;if ((h[j] + pass[j]) / 2 > min(ha, pass[j]) || (h[j] + pass[j]) / 2 < 0) return false;if (!dfs2(j, u, (h[j] + pass[j]) / 2)) return false;ha -= (h[j] + pass[j]) / 2;}else return false;}return true;};if (h[1] < -m || h[1] > m || (h[1] + m) % 2 != 0) cout << "NO\n";else if (dfs2(1, -1, (h[1] + m) / 2)) cout << "YES\n";else cout << "NO\n";
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

CF 1525D Armchairs

題目鏈接

dp

看到數據范圍就想到dp,甚至連狀態表示都構造出來了還搞不出來轉移方程,真是沒腦子啊

dp[i][j] 表示前 i 個需要變動的位置挪到前 j 個空位需要的最小代價

轉移方程: dp[i][j] = min(dp[i][j - 1], dp[i - 1][j - 1] + abs(a[i] - b[j]))

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;const int N = 1e6 + 10;
const int mod = 998244353;
const int maxn = 1e6 + 10;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n;cin >> n;vector<int> a, b;a.push_back(0), b.push_back(0);for (int i = 1; i <= n; i ++ ){int x;cin >> x;if (x) a.push_back(i);else b.push_back(i);}vector<vector<int>> dp(n + 1, vector<int>(n + 1, INF));for (int i = 0; i < b.size(); i ++ ) dp[0][i] = 0;for (int i = 1; i < a.size(); i ++ ){for (int j = 1; j < b.size(); j ++ ){dp[i][j] = min(dp[i][j - 1], dp[i - 1][j - 1] + abs(a[i] - b[j]));}}cout << dp[a.size() - 1][b.size() - 1] << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while (t -- ){solve();}
}

CF 220B Little Elephant and Array

題目鏈接

莫隊的板子修改一下,太久沒碰到過莫隊居然已經完全忘記這個東西了

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<PII, int> PPI;const int N = 1e6 + 10;
const int mod = 998244353;
const int maxn = 1e6 + 10;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n, m;cin >> n >> m;int size = sqrt(n);int bnum = ceil((double)n / size); // 把序列分成了多少塊vector<int> belong(1e6 + 10);for (int i = 1; i <= bnum; i ++ )for (int j = (i - 1) * size + 1; j <= i * size; j ++ ){belong[j] = i; // 標記每個元素屬于哪個塊}vector<int> a(n + 1);for (int i = 1; i <= n; i ++ ) cin >> a[i];vector<PPI> q(m);for (int i = 0; i < m; i ++ ){cin >> q[i].first.first >> q[i].first.second;q[i].second = i;}function<bool(PPI a, PPI b)> cmp = [&](PPI a, PPI b){if (belong[a.first.first] != belong[b.first.first]) return belong[a.first.first] < belong[b.first.first];else{if (belong[a.first.first] % 2 == 1) return belong[a.first.second] < belong[b.first.second];else return belong[a.first.second] > belong[b.first.second];}};sort(q.begin(), q.end(), cmp);int l = 1, r = 0, cnt = 0;unordered_map<int, int> mp;vector<int> ans(m);// 添加數function<void(int)> add = [&](int pos){mp[a[pos]] ++ ;if (mp[a[pos]] == a[pos]) cnt ++ ;if (mp[a[pos]] == a[pos] + 1) cnt -- ;};// 刪除數function<void(int)> del = [&](int pos){if (mp[a[pos]] == a[pos]) cnt -- ;if (mp[a[pos]] == a[pos] + 1) cnt ++ ;mp[a[pos]] -- ;};for (int i = 0; i < m; i ++ ){int ql = q[i].first.first, qr = q[i].first.second;while (l < ql) del(l++); // 如左指針在查詢區間左方,左指針向右移直到與查詢區間左端點重合while (l > ql) add(--l); // 如左指針在查詢區間左端點右方,左指針左移while (r < qr) add(++r); // 右指針在查詢區間右端點左方,右指針右移while (r > qr) del(r--); // 否則左移ans[q[i].second] = cnt;}for (int i = 0; i < m; i ++ ) cout << ans[i] << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while (t -- ){solve();}
}

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

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

相關文章

動態規劃(算法競賽、藍橋杯)--樹形DP樹形背包

1、B站視頻鏈接&#xff1a;E18 樹形DP 樹形背包_嗶哩嗶哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int n,V,p,root; int v[N],w[N]; int h[N],to[N],ne[N],tot; //鄰接表 int f[N][N];void add(int a,int b){to[tot]b;ne[tot]h[a];h[a…

數倉項目6.0(一)

尚硅谷大數據項目【電商數倉6.0】企業數據倉庫項目_bilibili 數據流轉過程 用戶??業務服務器??數據庫存儲??數倉統計分析??數據可視化 數據倉庫處理流程&#xff1a;數據源??加工數據??統計篩選數據??分析數據 數據庫不是為了數據倉庫服務的&#xff0c;需要…

B084-SpringCloud-Zuul Config

目錄 zuul系統架構和zuul的作用zuul網關實現配置映射路徑過濾器 Config概述云端管理本地配置 zuul zuul是分布式和集群后前端統一訪問入口 系統架構和zuul的作用 zuul把自己注冊進eureka&#xff0c;然后可通過前端傳來的服務名發現和訪問對應的服務集群 為了預防zuul單點故…

Java 枚舉類的深入理解與應用

Java 的枚舉類是一種特殊的類&#xff0c;通常表示一組常量。在編譯或設計時&#xff0c;當我們知道所有變量的可能性時&#xff0c;盡量使用枚舉類型。本文將通過一個具體的例子&#xff0c;深入探討 Java 枚舉類的定義、使用和高級特性。 目錄 枚舉類的定義與使用枚舉類的構造…

【OJ】求和與計算日期

文章目錄 1. 前言2. JZ64 求123...n2.1 題目分析2.2 代碼 3. HJ73 計算日期到天數轉換3.1 題目分析3.2 代碼 4. KY222 打印日期4.1 題目分析4.2 代碼 1. 前言 下面兩個題目均來自牛客&#xff0c;使用的編程語言是c&#xff0c;分享個人的一些思路和代碼。 2. JZ64 求123…n …

Vue 賦值后原數據隨賦值后的數據的變化而變化

很常見的&#xff0c;當我們直接用“”號等方式直接賦值后 原數據會隨賦值后的數據的變化而變化 但是有時候我們的需求是不需要原數據跟隨變化 所以怎么解決呢&#xff1f; 解決辦法有&#xff1a; 1.使用Object.assign() 方法 2.使用深拷貝函數 JSON.parse() 3.使用第三方庫lo…

畢業生信息招聘平臺|基于springboot+ Mysql+Java的畢業生信息招聘平臺設計與實現(源碼+數據庫+文檔+PPT)

目錄 論文參考 摘 要 數據庫設計 系統詳細設計 文末獲取源碼聯系 論文參考 摘 要 隨著社會的發展&#xff0c;社會的各行各業都在利用信息化時代的優勢。計算機的優勢和普及使得各種信息系統的開發成為必需。 畢業生信息招聘平臺&#xff0c;主要的模塊包括查看管理員&a…

#ifndef 和 #pragma once的區別

#ifndef 和 #pragma once 都是用來防止頭文件被重復包含的&#xff0c;但它們的工作方式和兼容性有所不同&#xff1a; #ifndef 是 C 的標準語法&#xff0c;它依賴于不重復的宏名稱&#xff0c;保證了包含在 #endif 的內容不會被重復包含。這個內容可以是一個文件的所有內容&…

Webpack配置與運行基礎教程

在前端開發中&#xff0c;Webpack是一款非常流行的模塊打包工具&#xff0c;它可以幫助我們將多個文件打包成一個或多個靜態資源文件&#xff0c;從而提高前端項目的性能和可維護性。本文將為你介紹Webpack的基礎配置和運行方法&#xff0c;幫助你快速上手Webpack。 什么是Web…

基于Springboot的無人智慧超市管理系統(有報告)。Javaee項目,springboot項目。

演示視頻&#xff1a; 基于Springboot的無人智慧超市管理系統&#xff08;有報告&#xff09;。Javaee項目&#xff0c;springboot項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層體系…

1.3 有哪些文本表示模型?它們各有什么優缺點?

1.3 有哪些文本表示模型?它們各有什么優缺點? 場景描述 文本是一類非常重要的非結構化數據&#xff0c;如何表示文本數據一直是機器學習領域的一個重要研究方向。 知識點 詞袋模型(Bag of Words)TF-IDF(Term Frequency-Inverse DocumentFrequency)主題模型(Topic Model)詞…

【每日刷題】數組-LC56、LC238、隨想錄1、LC560

1. LC56 合并區間 題目鏈接 Arrays.sort先讓intervals里的子數組按照子數組的第一個數字值從小到大排列。開一個新數組&#xff0c;newInterval&#xff0c;存放合并好的子數組讓intervals的當前子數組i的第一個數字與newInterval的當前子數組index的最后一個數字比較大小&am…

ARM 架構下國密算法庫

目錄 前言GmSSL編譯環境準備下載 GmSSL 源碼編譯 GmSSL 源碼SM4 對稱加密算法SM2 非對稱加密算法小結前言 在當前的國際形式下,國替勢不可擋。操作系統上,銀河麒麟、統信 UOS、鴻蒙 OS 等國產系統開始發力,而 CPU 市場,也是百花齊放,有 龍芯(LoongArch架構)、兆芯(X86…

Intel/國產化無人叉車機器視覺專用控制器

無人叉車和機器視覺是兩個獨立的技術領域&#xff0c;但它們可以結合使用以實現更高效的物流自動化。無人叉車是一種自動化運輸工具&#xff0c;可以在沒有人為干預的情況下完成貨物的搬運和運輸。機器視覺是一種人工智能技術&#xff0c;可以讓計算機識別和理解圖像或視頻中的…

YOLO:實時目標檢測的革命

目標檢測作為計算機視覺領域的一個核心任務&#xff0c;一直以來都是研究的熱點。而YOLO&#xff08;You Only Look Once&#xff09;技術作為其中的杰出代表&#xff0c;以其獨特的處理方式和卓越的性能&#xff0c;成為了實時目標檢測的標桿。本文將探討YOLO技術的核心原理、…

FPGA時序約束與分析--建立時間與保持時間

文章目錄 前言一、定義二、舉例說明2.1 建立時間違規2.2 保持時間違規前言 時序約束的定義–設計者根據實際的系統功能,通過時序約束的方式提出時序要求; FPGA 編譯工具根據設計者的時序要求,進行布局布線;編譯完成后, FPGA 編譯工具還需要針對布局布線的結果,套用特定的…

【C++】每日一題,189 輪轉數組

給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數。 示例 1: 輸入: nums [1,2,3,4,5,6,7], k 3 輸出: [5,6,7,1,2,3,4] 解釋: 向右輪轉 1 步: [7,1,2,3,4,5,6] 向右輪轉 2 步: [6,7,1,2,3,4,5] 向右輪轉 3 步: [5,6,7,1,2,3,…

搜索回溯算法(DFS)1------遞歸

目錄 簡介&#xff1a; 遞歸問題解題的思路模板 例題1&#xff1a;漢諾塔 例題2&#xff1a;合并兩個有序鏈表 例題3&#xff1a;反轉鏈表 例題4&#xff1a;兩兩交換鏈表中的節點 例題5&#xff1a;Pow&#xff08;x,n&#xff09;-快速冪 結語&#xff1a; 簡介&…

嵌入式驅動學習第二周——斷言機制

前言 這篇博客來聊一聊C/C的斷言機制。 嵌入式驅動學習專欄將詳細記錄博主學習驅動的詳細過程&#xff0c;未來預計四個月將高強度更新本專欄&#xff0c;喜歡的可以關注本博主并訂閱本專欄&#xff0c;一起討論一起學習。現在關注就是老粉啦&#xff01; 目錄 前言1. 斷言介紹…

貪心 Leetcode 134 加油站

加油站 Leetcode 134 學習記錄自代碼隨想錄 在一條環路上有 n 個加油站&#xff0c;其中第 i 個加油站有汽油 gas[i] 升 你有一輛油箱容量無限的的汽車&#xff0c;從第 i 個加油站開往第 i1 個加油站需要消耗汽油 cost[i] 升。你從其中的一個加油站出發&#xff0c;開始時油…