演算法的設計與應用研究
KMP:
【NOI2014】 動物園
# include <cstring> # include <cstdio> using namespace std; typedef long long ll; const int mod = 1e9+7; const int maxl = 1000010; char s[maxl]; int pre[maxl],dep[maxl]; void getFail(){ int l = strlen(s); int j=0; dep[1]=1; for (int i=1;i<l;++i){ while (j&&s[j]!=s[i]) j=pre[j]; if (s[j]==s[i]) ++j; pre[i+1]=j; dep[i+1]=dep[j]+1; } } void getAns(){ ll ans=1; int l = strlen(s); int j=0; for (int i=1;i<l;++i){ while (j&&s[j]!=s[i]) j=pre[j]; if (s[j]==s[i]) ++j; while (j>(i+1)/2 && j) j=pre[j]; ans=(ans*(dep[j]+1))%mod; } printf("%lld\n",ans); } int main(){ int T; scanf("%d",&T); while (T--){ scanf("%s",s); getFail(); getAns(); } return 0; }
線段樹:(採用神奇實現方法)
【Luogu#3372】區間加/區間和
# include <cstdio> using namespace std; typedef long long ll; const int maxn = 100010; int n,m; int ra[maxn]; namespace Seg{ ll sum[maxn<<2]; int tag[maxn<<2],siz[maxn<<2]; void pup(int x){ sum[x]=sum[x<<1]+sum[x<<1|1]; } void ptg(int x,int tg){ tag[x]+=tg; sum[x]+=siz[x]*tg; } void pdw(int x){ if (tag[x]) ptg(x<<1,tag[x]),ptg(x<<1|1,tag[x]),tag[x]=0; } void init(int x,int l,int r) { sum[x]=tag[x]=0; siz[x]=r-l+1; if (l==r){ sum[x]=ra[l]; return; } int m = (l+r)>>1; init(x<<1,l,m); init(x<<1|1,m+1,r); pup(x); } int opty,opl,opr,opg; ll opans; void step(int x,int l,int r) { if (opl <= l && r <= opr) { if (opty == 1) ptg(x,opg); if (opty == 2) opans += sum[x]; return; } int m = (l+r)>>1; pdw(x); if (opl<=m) step(x<<1,l,m); if (opr>m) step(x<<1|1,m+1,r); if (opty == 1) pup(x); } } void work(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;++i) scanf("%d",ra+i); Seg::init(1,1,n); for (int i=1;i<=m;++i) { scanf("%d%d%d",&Seg::opty,&Seg::opl,&Seg::opr); if(Seg::opty==1) scanf("%lld",&Seg::opg); Seg::opans=0; Seg::step(1,1,n); if(Seg::opty==2) printf("%lld\n",Seg::opans); } } int main(){ work(); return 0; }
相關推薦
演算法的設計與應用研究
KMP: 【NOI2014】 動物園 # include <cstring> # include <cstdio> using namespace std; typedef
《演算法設計與應用》資料結構回顧-樹
概念回顧 昨晚看到資料結構中的樹部分,現在回顧一下。 樹是資料結構裡面比較複雜,也比較有趣的一種。 對應的名稱很多,比如二叉樹,紅黑樹,B樹,B+樹等等 對應排序也挺多,前序,中序等等。 排序回顧 最近看到《演算法設計與應用》書裡面提到書的排序方式印象較深。 分為
演算法設計與應用基礎-第十一週
Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of a given stock on dayi. If you
演算法設計與分析 ——8-2 哈夫曼演算法的證明及應用
21個項和10個項的檔案歸併,比較一次拿走一個,最後剩下一個可以不用比較。 21這個檔案裡的每一個項,在它上邊要參與3次歸併,每次歸併,這裡面的項都要參與一次比較。也就是說,21這個結點裡面的每一個項都要比較它的深度數的次數。 -5
CAN設計與應用指南
校驗 代碼 OS 面積 註意 content 德國 檢測方法 碰撞檢測 CAN設計與應用指南 0.前言 這是我為公司寫的一個關於CAN總線的入門文章,對全面理解CAN總線特性很有幫助,拿出來分享給大家。 1. 簡介 CAN總線由德國BOSCH公司開發,最高速率可達到
演算法設計與分析——動態規劃(一)矩陣連乘
動態規劃——Dynamic programming,可以說是本人一直沒有啃下的骨頭,這次我就得好好來學學Dynamic programming. OK,出發! 動態規劃通常是分治演算法的一種特殊情況,它一般用於最優化問題,如果這些問題能夠: 1.能夠分解為規模更小的子問題 2.遞迴的
演算法設計與分析——分治法
前言 本文重點回顧了卜老師課堂上關於分治演算法的一些常見的問題。加油吧!ヾ(◍°∇°◍)ノ゙ 分治法(Divide and Conquer) 當面對一個問題的時候,我們可能一下子找不到解決問題的方法。此時,我們可以考慮將問題規模最小化,先看看當問題規模變小以後,我們如何去解決
演算法設計與分析04-排序問題
①氣泡排序:量量比較待排序資料元素的大小,發現兩個資料元素的次序相反時進行交換,直到沒有反序的資料元素為止。時間複雜度是O(n*2)。穩定的。下面給出兩種排序演算法,我比較喜歡第二種,因為第二種才能真正解釋冒泡的原理 public class bubble1 { &n
演算法設計與分析03-十進位制轉二進位制問題
10進位制數轉2 進位制數 題目:2 進位制除了 0,1,還可以用 2 表示。例如: 1-> 1 2-> 10 or 02 3->11 4 ->100 or 020 or 012 問題:這樣一個十進位制數轉為二進位制數,就不是唯一的了。現求十進位制數 N 轉換為這種二進位制數
演算法設計與分析02-走臺階問題
走臺階問題,一次可以走1,2,3級,都 N級臺階的方法數 。 初始:f(0) = 0; f(1) =1; f(2) = 1 + 1 = 2; 遞推公式:f(n) = f(n - 1) + f(n-2) + f(n - 3) 解題思路: 因為一次可以走1,2,3級,所以在第
演算法設計與分析01-連結串列的逆置
一.最常用的方法: LNode* ReverseList(LNode* head) { if (head == NULL) return NULL; &nbs
演算法設計與分析05-最近點對演算法
1.題目描述: 設S是平面上n個點的集合,在這一節中,我們考慮在S中找到一個點對p和q的問題,使其相互距離最短。換句話說,希望在S中找到具有這樣性質的兩點p1 = (x1,y1)和p2 = (x2,y2),使它們間的距離在所有S中點對間為最小 2.解題思路 一共分為三種情況 情況1:
演算法設計與計算(改寫二分搜尋演算法)(教材2-3)
二分搜尋 設a[0:n-1]是一個已排好序的陣列。請改寫二分搜尋演算法,使得當搜尋元素x不在陣列中時,返回小於x的最大元素的位置I和大於x的最大元素位置j public static int binarySearch(int []a,int x,int n) {int left=0; int r
HBase篇(1)-設計與應用場景
【每日五分鐘搞定大資料】系列,HBase第一篇 講完了Zookeeper, 接下來我們來說下Google三駕馬車之一BigTable的開源實現:HBase,要講得內容如下: hbase的特點 千萬級高併發 PB級儲存 非結構化儲存 動態列,稀疏列 支援二級索引
演算法設計與分析課程的時間空間複雜度
演算法設計與分析課程的時間空間複雜度: 總結 演算法 時間複雜度 空間複雜度 說明 Hanoi $ O(2^n) $ $ O(n) $ 遞迴使用 會場安排問題 \(O
【計算機演算法設計與分析】——SVM
一.簡介 支援向量機(support vector machines)是一種二分類模型,它的目的是尋找一個超平面來對樣本進行分割,分割的原則是間隔最大化,最終轉化為一個凸二次規劃問題來求解。由簡至繁的模型包括: (1)當訓練樣本線性可分時,通過硬間隔最大化,學習一個線性可分支援向量機;(2)當訓練樣本近似
RS485設計與應用指南
0. 前言 當前自動控制系統中常用的網路,如現場匯流排CAN、Profibus、INTERBUS-S以及ARCNet的物理層都是基於RS-485的匯流排進行總結和研究。 1、EIA RS-485標準 在自動化領域,隨著分散式控制系統的發展,迫切需要一種匯流排能適合遠距離的數字通訊
【演算法設計與分析作業題】第十一週:20. Valid Parentheses
題目 C++ solution class Solution { public: bool isValid(string s) { stack<char> cstack; for (int i = 0; i < s.si
《演算法設計與分析》第十一週作業
《演算法設計與分析》第十一週作業 標籤(空格分隔): 課堂作業 文章目錄 《演算法設計與分析》第十一週作業 @[toc] 題目概要 思路 具體實現 心得 原始碼:
《演算法設計與分析》第十二週作業
《演算法設計與分析》第十二週作業 標籤(空格分隔): 課堂作業 文章目錄 《演算法設計與分析》第十二週作業 @[toc] 題目概要 思路 具體實現 心得 原始碼: