C/C++藍橋杯算法真題打卡(Day6)

一、P8615 [藍橋杯 2014 國 C] 拼接平方數 - 洛谷

方法一:算法代碼(字符串分割法)

#include<bits/stdc++.h>  // 包含標準庫中的所有頭文件,方便編程
using namespace std;     // 使用標準命名空間,避免每次調用標準庫函數時都要加 std::bool f[1000005];         // 定義一個布爾數組 f,用于標記某個數是否是完全平方數
int l, r;                // 定義兩個整數 l 和 r,表示查詢的范圍 [l, r]
string s;                // 定義一個字符串 s,用于存儲數字的字符串形式// 判斷一個數是否是完全平方數
bool pfs(int x) {return (int)sqrt(x) == sqrt(x);  // 如果 x 的平方根的整數部分等于其平方根,則 x 是完全平方數
}int main() {cin >> l >> r;  // 讀取輸入的 l 和 r,表示查詢的范圍 [l, r]// 預處理:標記 [1, r] 范圍內的所有完全平方數for (int i = 1; i <= r; i++) {if (pfs(i))  // 如果 i 是完全平方數f[i] = 1;  // 將 f[i] 標記為 1(true)}// 遍歷 [l, r] 范圍內的所有數for (int i = l; i <= r; i++) {if (f[i]) {  // 如果 i 是完全平方數s = to_string(i);  // 將 i 轉換為字符串 sint sl = s.size();  // 獲取字符串 s 的長度// 嘗試將 s 分成兩部分,判斷這兩部分是否都是完全平方數for (int j = 1; j < sl; j++) {int x = stoi(s.substr(0, j));  // 提取 s 的前 j 位,轉換為整數 xint y = stoi(s.substr(j));     // 提取 s 的剩余部分,轉換為整數 y// 如果 x 和 y 都是完全平方數if (f[x] && f[y]) {printf("%d\n", i);  // 輸出 ibreak;  // 跳出內層循環,繼續檢查下一個 i}}}}return 0;  // 程序正常結束
}

代碼思路

  1. 預處理完全平方數

    • 使用數組?f?標記?[1, r]?范圍內的所有完全平方數。

    • 通過?pfs?函數判斷一個數是否是完全平方數。

  2. 遍歷查詢范圍

    • 對于?[l, r]?范圍內的每個數?i,如果它是完全平方數,則將其轉換為字符串?s

    • 嘗試將?s?分成兩部分,判斷這兩部分是否都是完全平方數。

  3. 輸出符合條件的數

    • 如果找到滿足條件的數?i,則輸出它。


關鍵點

  • 完全平方數判斷

    • 使用?sqrt?函數判斷一個數是否是完全平方數。

    • 如果?(int)sqrt(x) == sqrt(x),則?x?是完全平方數。

  • 字符串分割

    • 將數字轉換為字符串后,嘗試將其分成兩部分。

    • 使用?substr?函數提取子串,并使用?stoi?函數將子串轉換為整數。

  • 范圍查詢

    • 只處理?[l, r]?范圍內的數,確保程序效率。


方法二:算法代碼(取模分割法)

#include<bits/stdc++.h>  // 包含標準庫中的所有頭文件,方便編程
using namespace std;     // 使用標準命名空間,避免每次調用標準庫函數時都要加 std::bool f[1000005];         // 定義一個布爾數組 f,用于標記某個數是否是完全平方數
int l, r;                // 定義兩個整數 l 和 r,表示查詢的范圍 [l, r]
string s;                // 定義一個字符串 s,用于存儲數字的字符串形式(雖然在這段代碼中未使用)// 判斷一個數是否是完全平方數
bool pfs(int x) {return (int)sqrt(x) == sqrt(x);  // 如果 x 的平方根的整數部分等于其平方根,則 x 是完全平方數
}int main() {cin >> l >> r;  // 讀取輸入的 l 和 r,表示查詢的范圍 [l, r]// 預處理:標記 [1, r] 范圍內的所有完全平方數for (int i = 1; i <= r; i++) {if (pfs(i))  // 如果 i 是完全平方數f[i] = 1;  // 將 f[i] 標記為 1(true)}// 遍歷 [l, r] 范圍內的所有數for (int i = l; i <= r; i++) {if (f[i]) {  // 如果 i 是完全平方數int k = 10;  // 初始化 k 為 10,用于分割數字// 嘗試將 i 分成兩部分,判斷這兩部分是否都是完全平方數for (int j = 1; j <= 5; j++) {  // 最多嘗試 5 次分割,因為a和b的范圍為10的6次方int x = i % k;  // 提取 i 的最后 j 位數字int y = i / k;  // 提取 i 的前面部分數字k *= 10;  // 將 k 乘以 10,用于下一次分割// 如果 x 和 y 都是完全平方數if (f[x] && f[y]) {printf("%d\n", i);  // 輸出 ibreak;  // 跳出內層循環,繼續檢查下一個 i}}}}return 0;  // 程序正常結束
}

代碼思路

  1. 預處理完全平方數

    • 使用數組?f?標記?[1, r]?范圍內的所有完全平方數。

    • 通過?pfs?函數判斷一個數是否是完全平方數。

  2. 遍歷查詢范圍

    • 對于?[l, r]?范圍內的每個數?i,如果它是完全平方數,則嘗試將其分成兩部分。

    • 使用變量?k?從 10 開始,逐步嘗試將?i?分成兩部分:

      • x = i % k:提取?i?的最后?j?位數字。

      • y = i / k:提取?i?的前面部分數字。

    • 檢查?x?和?y?是否都是完全平方數。

  3. 輸出符合條件的數

    • 如果找到滿足條件的數?i,則輸出它。


關鍵點

  • 完全平方數判斷

    • 使用?sqrt?函數判斷一個數是否是完全平方數。

    • 如果?(int)sqrt(x) == sqrt(x),則?x?是完全平方數。

  • 數字分割

    • 使用取模運算?%?和除法運算?/?將數字分成兩部分。

    • 通過逐步增加?k?的值(10, 100, 1000, ...),嘗試不同的分割方式。

  • 范圍查詢

    • 只處理?[l, r]?范圍內的數,確保程序效率。

?

二、P8699 [藍橋杯 2019 國 B] 排列數 - 洛谷(國賽題難啊qwq,已放棄ing)

大佬的算法代碼:?

#include <bits/stdc++.h>  // 包含標準庫中的所有頭文件,方便編程
#define ll long long      // 定義宏 ll 表示 long long 類型
#define setp setprecision // 定義宏 setp 表示 setprecision 函數
#define mem(a, m) memset(a, m, sizeof(a))  // 定義宏 mem 表示 memset 函數
using namespace std;const int MOD = 123456;  // 定義常量 MOD,表示取模的值
int n, k;                // 定義兩個整數 n 和 k,分別表示排列的長度和單調排列的折點數
int dp[505][505];        // 定義二維數組 dp,用于動態規劃// 自定義取模函數
int mod(int a) {return a % MOD;  // 返回 a 對 MOD 取模的結果
}int main() {ios::sync_with_stdio(false);  // 關閉同步流,提高輸入輸出效率cin >> n >> k;  // 讀取輸入的 n 和 kdp[1][0] = 1;  // 初始化 dp[1][0] = 1,表示長度為 1 的排列有 1 種情況// 動態規劃填充 dp 數組for(int i = 2; i < n; i++) {  // 遍歷排列的長度從 2 到 n-1dp[i][0] = 2;  // 初始化 dp[i][0] = 2,表示長度為 i 的排列有 2 種單調排列for(int j = 0; j <= i; j++) {  // 遍歷可能的折點數// 更新 dp[i+1][j],表示在長度為 i+1 的排列中,折點數為 j 的情況dp[i+1][j] += mod(dp[i][j] * (j + 1));// 更新 dp[i+1][j+1],表示在長度為 i+1 的排列中,折點數為 j+1 的情況dp[i+1][j+1] += mod(dp[i][j] * 2);// 更新 dp[i+1][j+2],表示在長度為 i+1 的排列中,折點數為 j+2 的情況dp[i+1][j+2] += mod(dp[i][j] * (i - j - 2));}}cout << dp[n][k-1] % MOD;  // 輸出長度為 n 的排列中,折點數為 k-1 的情況數,并對 MOD 取模return 0;  // 程序正常結束
}

大佬的思路(牛牛牛):

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

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

相關文章

如何在 GoLand 中設置默認項目文件夾

在使用 GoLand 進行開發時&#xff0c;設置一個默認的項目文件夾可以大大提高工作效率。默認項目文件夾會在你打開或新建項目時自動預選&#xff0c;避免每次都需要手動導航到目標目錄。本文將詳細介紹如何在 GoLand 中設置默認項目文件夾。 步驟一&#xff1a;打開系統設置 …

DeepSeek私有化部署與安裝瀏覽器插件內網穿透遠程訪問實戰

文章目錄 前言1. 本地部署OllamaDeepSeek2. Page Assist瀏覽器插件安裝與配置3. 簡單使用演示4. 遠程調用大模型5. 安裝內網穿透6. 配置固定公網地址 前言 最近&#xff0c;國產AI大模型Deepseek成了網紅爆款&#xff0c;大家紛紛想體驗它的魅力。但隨著熱度的攀升&#xff0c…

Docker運行postgreSQL,由于異常啟動或者退出后,提示could not locate a valid checkpoint record

pg_resetwal 是 PostgreSQL 的“急救工具”&#xff0c;用于在極端情況下修復因 WAL 或控制文件損壞導致的啟動問題。 但需注意&#xff1a; 風險極高&#xff0c;可能導致數據不一致。必須立即轉儲并恢復&#xff0c;避免直接在修復后的數據庫中執行寫操作。僅在備份后使用&…

pytorch小記(十):pytorch中torch.tril 和 torch.triu 詳解

pytorch小記&#xff08;十&#xff09;&#xff1a;pytorch中torch.tril 和 torch.triu 詳解 PyTorch torch.tril 和 torch.triu 詳解1. torch.tril&#xff08;計算下三角矩陣&#xff09;&#x1f4cc; 作用&#x1f50d; 語法&#x1f539; 參數&#x1f4cc; 示例&#x1…

Java基礎與集合

參考 Java基礎知識詳解&#xff1a;從面向對象到異常處理-CSDN博客 2024年 Java 面試八股文&#xff08;20w字&#xff09;_java面試八股文-CSDN博客 基礎知識 java概述 什么是java&#xff1f; java是一種面向對象的編程語言 java特點 面向對象&#xff08;繼承&#…

【R語言】二項分布,正態分布,極大似然估計實現

二項分布 生成二項分布概率 s <- 0:60 prob <- dbinom(s, size 60, prob 1/6)s <- 0:60&#xff1a;生成 0 到 60 之間的整數&#xff0c;表示可能的成功次數。 dbinom(s, size 60, prob 1/6)dbinom(x, size, prob) 計算二項分布的概率質量函數&#xff08;PMF…

【C語言】:學生管理系統(多文件版)

一、文件框架 二、Data data.txt 三、Inc 1. list.h 學生結構體 #ifndef __LIST_H__ #define __LIST_H__#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <time.h>#define MAX_LEN 20// 學生信息…

OpenResty/Lua 編碼指南/指南

很多開發語言都有自己的編碼規范&#xff0c;來告訴開發者這個領域內一些約定俗成的東西&#xff0c;讓大家寫的代碼風格保持一致&#xff0c;并且避免一些常見的陷阱。這對于新手來說是非常友好的&#xff0c;可以讓初學者快速準確地上手。比如 Python 的 PEP 80&#xff0c;就…

數據結構 -- 二叉樹的存儲結構

二叉樹的存儲結構 順序存儲 #define MaxSize 100 struct TreeNode{ElemType value; //結點中的數據元素bool isEmpty; //結點元素是否為空 };//定義一個長度為MaxSize的數組t&#xff0c;按照從上至下、從左至右的順序依次完成存儲完全二叉樹中的各個節點 TreeNode t[MaxSi…

Linux系統移植篇(十一)Linux 內核啟動流程

要分析 Linux 啟動流程&#xff0c;同樣需要先編譯一下 Linux 源碼&#xff0c;因為有很多文件是需要編譯才 會生成的。首先分析 Linux 內核的連接腳本文件 arch/arm/kernel/vmlinux.lds&#xff0c;通過鏈接腳本可以 找到 Linux 內核的第一行程序是從哪里執行的。vmlinux.lds …

【Docker入門】構建推送第一個Docker映像

【Docker入門】構建推送第一個Docker映像 Build and Push the First Docker Image By JacksonML Docker的容器(Container)映像是輕量級的可執行獨立包&#xff0c;包含代碼、運行時、庫、環境變量以及配置文件&#xff0c;它對于運行軟件至關重要。注冊表可在團隊間分享映像。…

【eNSP實戰】(續)一個AC多個VAP的實現—將隧道轉發改成直接轉發

在 一個AC多個VAP的實現—CAPWAP隧道轉發 此篇文章配置的基礎上&#xff0c;將隧道轉發改成直接轉發 一、改成直接轉發需要改動的配置 &#xff08;一&#xff09;將連接AP的接口改成trunk口&#xff0c;并允許vlan100、101、102通過 [AC1]interface GigabitEthernet 0/0/8 …

SPI 總線協議

1、協議介紹 SPI&#xff0c;是英語 Serial Peripheral interface 的縮寫&#xff0c;顧名思義就是串行外圍設備接口。是 Motorola 首先在其 MC68HCXX 系列處理器上定義的。 SPI&#xff0c;是一種高速的&#xff0c;全雙工&#xff0c;同步的通信總線。主節點或子節點的數據在…

我愛學算法之——滑動窗口攻克子數組和子串難題(上)

現在來學習"滑動窗口"這一算法思想。 至于什么是"滑動窗口"呢&#xff1f;簡單來說就是同向雙指針&#xff1b;現在來通過題目來了解什么是"滑動窗口" 一、長度最小的子數組 題目鏈接&#xff1a;長度最小的子數組 題目解析 先來看題目&#…

ora-600 ktugct: corruption detected---惜分飛

接手一個oracle 21c的庫恢復請求,通過Oracle數據庫異常恢復檢查腳本(Oracle Database Recovery Check)腳本檢測之后,發現undo文件offline之后,做了resetlogs操作,導致該文件目前處于WRONG RESETLOGS狀態 嘗試恢復數據庫ORA-16433錯誤 SQL> recover datafile 1; ORA-00283:…

20. Excel 自動化:Excel 對象模型

一 Excel 對象模型是什么 Excel對象模型是Excel圖形用戶界面的層次結構表示&#xff0c;它允許開發者通過編程來操作Excel的各種組件&#xff0c;如工作簿、工作表、單元格等。 xlwings 是一個Python庫&#xff0c;它允許Python腳本與Excel進行交互。與一些其他Python庫&#x…

IIS 服務器日志和性能監控

Internet Information Services &#xff08;IIS&#xff09; 是 Microsoft 提供的一款功能強大、靈活且可擴展的 Web 服務器&#xff0c;用于托管網站、服務和應用程序。IIS 支持 HTTP、HTTPS、FTP、SMTP 和更多用于提供網頁的協議&#xff0c;因此廣泛用于企業環境。 IIS 的…

jenkins pipline 自動化測試

以下是一個典型的 Jenkins Pipeline 示例&#xff0c;用于執行自動化測試流程&#xff08;支持單元測試、集成測試、代碼質量掃描&#xff09;&#xff0c;包含多階段執行和測試結果處理&#xff1a; pipeline {agent anyenvironment {// 定義環境變量PROJECT_NAME "my-…

APP測試

一、APP測試范圍 功能測試性能測試&#xff1a;CPU、內存占用、啟動速度、流量、電量消耗、流暢度、穩定性專項測試&#xff1a;安裝卸載升級、push消息推送 、交叉事件測試 、用戶體驗測試 、兼容性測試 二、APP包發布方式及策略 分類&#xff1a; 內部發布渠道。如&#x…

12 File文件對象:創建、獲取基本信息、遍歷文件夾、查找文件;字符集的編解碼 (黑馬Java視頻筆記)

文章目錄 File >> 存儲數據的方案1. 認識File2. File操作2.1 創建File對象2.2 File操作1&#xff09;對文件對象的信息的操作2&#xff09;文件/文件夾的創建/刪除3&#xff09;??對文件夾的遍歷 3. 方法遞歸3.1 認識遞歸3.2 遞歸算法及其執行流程1) 案例&#xff1a;2…