字典樹模板+位運算

P3879 [TJOI2010] 閱讀理解 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)

trie樹板子題,稍微有一丟丟不一樣,套用字典樹模板稍加修改就能過

手搓字典樹代碼:

char ch[1010][26], cnt[1010], idx;
void insert(string s)//插入
{int p = 0;for (int i = 1; s[i]; i++){int j = s[i] - 'a';if (!ch[p][j]){ch[p][j] = ++idx;}p = ch[p][j];}cnt[p]++;
}
int query(string s)//查詢
{int p = 0;for (int i = 1; s[i]; i++){int j = s[i] - 'a';if (!ch[p][j]){return 0;}p = ch[p][j];}return cnt[p];
}

題解代碼:

#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
using namespace std;
typedef long long ll;
char s[50010];
char ch[500010][26], idx;
char w[500010][1010];
int n, m;
inline int read()
{int k = 0, f = 1; char ch = getchar();while (ch < '0' || ch>'9'){if (ch == '-')f = -1;ch = getchar();}while (ch >= '0' && ch <= '9'){k = k * 10 + ch - '0';ch = getchar();}return k * f;
}
void insert(int x)
{scanf("%s", s + 1);int l = strlen(s + 1);int p = 0;for (int i = 1; i<=l; i++){int j = s[i] - 'a';if (!ch[p][j]){ch[p][j] = idx++;}p = ch[p][j];}w[p][x] = 1;
}
void check()
{scanf("%s", s + 1);int l = strlen(s + 1);int p = 0;int flag = 1;for (int i = 1; i<=l; i++){int j = s[i] - 'a';if (!ch[p][j]){flag = 0;break;}p = ch[p][j];}if (flag){for (int i = 1; i <= n; i++){if (w[p][i]){cout << i << " ";}}cout << endl;}
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);n = read();for (int i = 1; i <= n; i++){int x = read();for (int j = 1; j <= x; j++){insert(i);}}m = read();for (int i = 1; i <= m; i++){check();}return 0;
}

位運算:

左移:

1<<n=2^n,n<<1=2n

右移:

n>>1=n/2

取出n在二進制下的第k位:(n>>k)&1

取出n在二進制下的第0~k-1位(后k位):n&((1<<k)-1)

把n在二進制下的第k位取反:n xor(1<<k)

對n在二進制下的第k位賦值1:n|(1<<k)

對n在二進制下的第k位賦值0:n&(~(1<<k))

來兩道位運算的題目練練手(算法競賽進階指南)

P1226 【模板】快速冪 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)

思路:

解決這道題有兩種方法:

1.分治思想:n為偶數時把2^n分成a^(n/2),n為奇數時分為a^(n/2)*a

2.倍增思想:稍微有一點難理解(

從頭開始。若當前?p?為偶數,咱們不著急,只需把?x?自乘,然后?p/=2?(即考慮下一層,下幾層會幫我們乘上 (x2)p/2的)。

若當前?p?為奇數,說明 p=x?(x2)(p?1)/2?中前面那個?x?的存在,ans?=x。然后繼續考慮下一層(下幾層會幫我們乘上(x2)(p?1)/2的)

)

代碼1(分治):
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
#include <stdio.h>
using namespace std;
typedef long long ll;
inline int read()
{int k = 0, f = 1; char ch = getchar();while (ch < '0' || ch>'9'){if (ch == '-')f = -1;ch = getchar();}while (ch >= '0' && ch <= '9'){k = k * 10 + ch - '0';ch = getchar();}return k * f;
}
int solve(ll a, ll b, ll p)
{if (b == 0)return 1;ll ans = solve(a, b / 2, p) % p;if (b % 2 == 0){return ans * ans % p;}else{return ans * ans % p * a % p;}
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);ll a, b, p;cin >> a >> b >> p;cout << a << "^" << b << " mod " << p << "=" << solve(a, b, p) << endl;return 0;
}
代碼2(倍增):
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
#include <stdio.h>
using namespace std;
typedef long long ll;
inline int read()
{int k = 0, f = 1; char ch = getchar();while (ch < '0' || ch>'9'){if (ch == '-')f = -1;ch = getchar();}while (ch >= '0' && ch <= '9'){k = k * 10 + ch - '0';ch = getchar();}return k * f;
}
void solve(ll x, ll y, ll p)
{ll ans = 1 % p;for (; y; y >>= 1){if (y & 1){ans = ans * x % p;}x = x * x % p;}cout << x << "^" << y << " mod " << p << "=" << ans << endl;
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);ll a, b, p;cin >> a >> b >> p;solve(a, b, p);return 0;
}

P10446 64位整數乘法 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)

代碼:

#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
#include <stdio.h>
using namespace std;
typedef long long ll;
inline int read()
{int k = 0, f = 1; char ch = getchar();while (ch < '0' || ch>'9'){if (ch == '-')f = -1;ch = getchar();}while (ch >= '0' && ch <= '9'){k = k * 10 + ch - '0';ch = getchar();}return k * f;
}
void solve(ll x, ll y, ll z)
{ll ans = 0;for (; y; y >>= 1){if (y & 1)ans = (ans + x) % 5;x = (x * 2) % z;}cout << ans;
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);ll a, b, p;cin >> a >> b >> p;solve(a, b, p);return 0;
}

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

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

相關文章

高校搭建AIGC新媒體實驗室,創新新聞教育教學模式

高校作為人才培養的重要陣地&#xff0c;必須緊跟時代步伐&#xff0c;不斷創新教育教學模式&#xff0c;提升跨界融合育人水平&#xff0c;通過AIGC新媒體實驗室探索創新人才培養模式。AIGC新媒體實驗室不僅能夠高效賦能高校宣傳媒體矩陣&#xff0c;也可以助力教學實踐與AIGC…

ISA95-Part3-通訊協議的解析與開發指南

在 MES/MOM 系統中實現 ISA-95 標準的通信協議部分,通常涉及以下幾個關鍵步驟和應用場景: 一、關鍵步驟和應用場景: 1. ~協議選擇~: - MES/MOM 系統需選擇符合 ISA-95 標準的通信協議,常用的有 OPC UA(OLE for Process Control Unified Architecture)、XML、以及基于 H…

5分鐘讀懂GPS-RTK實時動態技術,建議收藏!

由于”智慧工地“理念的興起和發展&#xff0c;目前越來越多的企業將信息技術手段融合于施工現場安全管理&#xff0c;構建智能化的安全監管模式。基于此&#xff0c;藍牙LORA融合定位技術、UWB超寬帶定位技術、GPS-RTK定位技術等信息技術也越來越頻繁出現在大眾視野。然而&…

記錄通過Cloudflare部署屬于自己的docker鏡像源

引言 由于最近國內無法正常拉取docker鏡像&#xff0c;然而找了幾個能用的docker鏡像源發現拉取回來的docker鏡像不是最新的版本&#xff0c;部署到Cloudflare里Workers 和 Pages&#xff0c;拉取docker 鏡像成功&#xff0c;故記錄部署過程。 部署服務 登錄Cloudflare后&…

Android Gradle開發與應用(一): Gradle基礎

Gradle是一種基于Groovy語言的構建工具&#xff0c;用于自動化構建、測試和部署Android應用程序。它提供了一種靈活和可擴展的方式來管理項目的構建過程&#xff0c;并且可以輕松地集成到Android開發工作流程中。 本文將介紹Gradle的基礎知識&#xff0c;包括Gradle的安裝和配…

軟設之面向對象開發流程

面向對象開發流程分為 1.面向對象分析 2.面向對象設計 3.面向對象程序設計 4.面向對象測試 其中 面向對象分析包括 認定對象 組織對象 對象間的互相租用 基于對象的操作 識別類及對象&#xff1a; 識別類及對象 定義屬性 定義服務 識別關系 識別包 面向對象程…

C++ 智能指針內存泄漏問題

shared_ptr相互嵌套導致循環引用 代碼示例 #include <iostream> #include <memory> using namespace std;class B;class A { public:std::shared_ptr<B> b_ptr;~A() { std::cout << "A destroyed\n"; } };class B { public:std::shared_pt…

數據結構 1.1 數據結構的基本概念

本章總覽&#xff1a; 一.什么是數據 1.數據 數據是信息的載體&#xff0c;是描述客觀事物屬性的數、字符及所有能輸入到計算機中并被計算機程 序識別和處理的符號的集合。數據是計算機程序加工的原料。 早期計算機只能處理純數值的問題&#xff0c;如世界第一題計算機ENI…

轉讓北京文化傳媒公司帶營業性演出經紀許可證

影視文化傳播倡導將健康的影視文化有效傳播給觀眾&#xff0c;從而構建觀眾與電影制作者的良 性溝通與互動&#xff0c;是溝通電影制作者與電影受眾的重要橋梁。影視文化泛指以電影&#xff0c;電視方式所進行的全部文化創造&#xff0c;即體現為電影&#xff0c;電視全部的存在…

Java-List集合堆內存溢出

Java-List集合堆內存溢出 情況一情況二對照分析對照規定堆內存 情況一 往List<Object>的集合中不斷插入元素&#xff0c;集合底層的數組會不斷擴容&#xff0c;從0 -> 10 -> 10 10>>1…。最終出現堆內存溢出&#xff0c;是在擴容數組大小的時候。這里的過程…

【應屆應知應會】SQL常用知識點50道

SueWakeup 個人主頁&#xff1a;SueWakeup 系列專欄&#xff1a;借他一雙眼&#xff0c;愿這盛世如先生所愿 個性簽名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陸離 本文封面由 凌七七~? 友情提供 目錄 數據庫的概念 (什么是數據庫) RDBMS NOSQL 數據庫的分類 …

Qt涂鴉板

Qt版本&#xff1a;Qt6 具體代碼&#xff1a; 頭文件 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog>QT_BEGIN_NAMESPACE namespace Ui { class Dialog; } QT_END_NAMESPACEclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent n…

0145__contain_of的原理與實現

contain_of的原理與實現_contain of-CSDN博客

從零開始!Jupyter Notebook的安裝教程

引言 Jupyter Notebook作為一種交互式的開發環境&#xff0c;已經成為數據科學和機器學習領域中不可或缺的工具之一。它能夠將代碼、文本、圖像和數據結合在一個靈活的文檔中&#xff0c;使得數據分析和可視化變得更加直觀和高效。 本文將詳細介紹Jupyter Notebook的安裝過程…

深入理解 Git `git add -p` 命令中的交互選項

個人名片 &#x1f393;作者簡介&#xff1a;java領域優質創作者 &#x1f310;個人主頁&#xff1a;碼農阿豪 &#x1f4de;工作室&#xff1a;新空間代碼工作室&#xff08;提供各種軟件服務&#xff09; &#x1f48c;個人郵箱&#xff1a;[2435024119qq.com] &#x1f4f1…

500mA、低壓差、低噪聲、超快、無需旁路電容的CMOS LDO穩壓器RT9013

一般描述 RT9013 SOT23-5封裝的外觀和絲印 RT9013 是一款高性能的 500mA LDO 穩壓器&#xff0c;具有極高的 PSRR 和超低壓差。非常適合具有苛刻性能和空間要求的便攜式射頻和無線應用。 RT9013的靜態電流低至25μA&#xff0c;進一步延長了電池的使用壽命。RT9013 也適用于低…

mysql在部署時的問題

1.遠程連接是否開放問題 DataGrip遠程連接Ubuntu Linux MySQL服務器報錯DBMS: MySQL (no ver.)-CSDN博客 【MySQL】DataGrip遠程連接MySQL_datagrip連接遠程mysql數據庫-CSDN博客 一定要把對應端口規則打開 2.遠程連接不適用3306作為默認運行端口 打開mysql的配置文件&…

音樂發行平臺無加密開源源碼

適用于唱片公司&#xff0c;用于接收物料&#xff0c;下載物料功能&#xff1a;個人或機構認證&#xff0c;上傳專輯和歌曲&#xff0c;版稅結算環境要求php7.4Nginx 1、導入數據庫 2、/inc/conn.php里填寫數據庫密碼等后臺路徑/admin&#xff08;可自行修改任意入口名稱&…

AI在軟件開發中的角色:助手還是取代者?

目錄 前言 一、AI工具現狀&#xff1a;高效助手的崛起 二、AI對開發者的影響&#xff1a;新技能與競爭力的重塑 三、AI開發的未來&#xff1a;共生而非取代 寫在最后 前言 隨著科技的飛速發展&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;在軟件開發領域的應用日…

【JS】過濾數組中空值——arr.filter(Boolean)

前言&#xff1a;過濾數組中的空值&#xff0c;包括 &#xff08;undefined、null、“”、0、false、NaN&#xff09; Boolean函數可以將一個值轉換為布爾值&#xff0c;空值會被轉換為false&#xff0c;非空值會被轉換為true 方法&#xff1a; const arr [1, 2, ""…