BZOJ_1009_[HNOI2008]_GT考試_(動態規劃+kmp+矩陣乘法優化+快速冪)

描述


http://www.lydsy.com/JudgeOnline/problem.php?id=1009

字符串全部由0~9組成,給出一個串s,求一個長度為n的串,不包含s的種類有多少.

?

分析


第一眼以為是組合.然后更滑稽的是用錯誤的方法手算樣例居然算出來是對的...我數學是有多差...

題解也是看了好半天,有點難理解.

感覺PoPoQQQ神犇講得還是比較清楚的.傳送門:http://blog.csdn.net/popoqqq/article/details/40188173

我們用dp[i][j]表示 : 長度為i的串, 其長度為j的后綴 與 s長度為j的前綴 完全匹配的種類數.

這樣的話最后的答案就是ans=sigma{dp[n][i]}(0<=i<m).

這里還有一個二維的a數組,就這個比較難解釋...

dp[i][y]可以由dp[i-1][x]轉移而來,那么匹配的s的前綴由長度x變成了長度y,a[x][y]表示的就是在結尾添加一個字符后,匹配長度從x變成y,這樣的字符有多少種.

那么 dp[i][y]=sigma{dp[i-1][x]*a[x][y]}.

這個可以用矩陣乘法算.

那么a數組怎么求呢?用kmp.

a[x][y]表示的是前綴匹配長度由x變成了y的種類數,那么從每一位i開始匹配,如果匹配到了j,那么a[i][j+1]++(數組從0開始,第i位之前匹配了i個,匹配到第j位,應該是j+1個).

?

p.s.我好菜呀...

?

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int maxn=100+5;
 5 int n,m,p,ans;
 6 char str[maxn];
 7 int f[maxn];
 8 
 9 struct matrix{
10     int x[25][25];
11     matrix(){ memset(x,0,sizeof x); }
12     int * operator [] (int id){ return x[id]; }
13 }dp,a;
14 void operator *= (matrix &x,matrix &y){
15     matrix z;
16     for(int i=0;i<m;i++)for(int j=0;j<m;j++)for(int k=0;k<m;k++)
17         z[i][j]+=x[i][k]*y[k][j], z[i][j]%=p;
18     x=z;
19 }
20 void kmp(){
21     for(int i=1;i<m;i++){
22         int j=f[i];
23         while(j&&str[i]!=str[j]) j=f[j];
24         f[i+1]=str[i]==str[j]?j+1:0;
25     }
26     for(int i=0;i<m;i++)for(char k='0';k<='9';k++){
27         int j=i;
28         while(j&&k!=str[j]) j=f[j];
29         if(k==str[j]) a[i][j+1]++;
30         else a[i][0]++;
31     }
32 }
33 void quick_power(int y){
34     for(;y;a*=a,y>>=1) if(y&1) dp*=a;
35 }
36 int main(){
37     scanf("%d%d%d",&n,&m,&p);
38     scanf("%s",str);
39     kmp();
40     dp[0][0]=1;
41     quick_power(n);
42     for(int i=0;i<m;i++) ans+=dp[0][i], ans%=p;
43     printf("%d\n",ans);
44     return 0;
45 }
View Code

?

1009: [HNOI2008]GT考試

Time Limit: 1 Sec??Memory Limit: 162 MB
Submit: 2815??Solved: 1738
[Submit][Status][Discuss]

Description

  阿申準備報名參加GT考試,準考證號為N位數X1X2....Xn(0<=Xi<=9),他不希望準考證號上出現不吉利的數字。
他的不吉利數學A1A2...Am(0<=Ai<=9)有M位,不出現是指X1X2...Xn中沒有恰好一段等于A1A2...Am. A1和X1可以為
0

Input

  第一行輸入N,M,K.接下來一行輸入M位的數。 N<=10^9,M<=20,K<=1000

Output

  阿申想知道不出現不吉利數字的號碼有多少種,輸出模K取余的結果.

Sample Input

4 3 100
111

Sample Output

81

HINT

Source

轉載于:https://www.cnblogs.com/Sunnie69/p/5554726.html

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

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

相關文章

智慧政務解決方案(28頁)pdf_【金眾電子】智慧政務解決方案

智慧政務解決方案立式黨建廣告機廣告機簡介&#xff1a;KC-立式政務廣告機(室內/室外可選)液晶屏幕特別賣點&#xff1a;安裝簡易、亮度調節、實時更新、傳輸安全應用場所&#xff1a;各種需要文化傳播的政務機構、政府機關、會議場所等。雙立柱政務文化欄/宣傳欄文化欄簡介&am…

笨辦法學linux dhcp,了解網關、DNS、子網掩碼、MAC地址、DHCP

原標題&#xff1a;了解網關、DNS、子網掩碼、MAC地址、DHCP什么是網關、DNS、子網掩碼&#xff0c;它有什么作用&#xff0c;確實&#xff0c;我們平時在網絡中總是在不斷的提到網關&#xff0c;卻很少真正的去了解它。一、什么是網關1、什么是網關網關是一種充當轉換重任的計…

數據庫:SQLServer Stuff 函數用法筆記

今天小編給大家分享一下自己整理一下SQLServer Stuff函數用法技巧和常用示例&#xff0c;有需要的朋友可以學習一下。一、Stuff函數的作用1.1官方解釋STUFF 函數將字符串插入到另一個字符串中。 它從第一個字符串的開始位置刪除指定長度的字符&#xff1b;然后將第二個字符串插…

自定義注解,aop實現注解鎖

多線程環境下&#xff0c;會出現線程不安全的問題&#xff0c;所以要對某些方法加鎖以保證線程安全 但是如果方法過多&#xff0c;每個方法前后都加這么一句&#xff0c;有點麻煩了&#xff0c;而且代碼可讀性也會差一些。可以使用aop切面編程&#xff0c;對某些加有特定注解&…

Android——實現歡迎界面的自動跳轉(轉)

Android實現歡迎界面的自動跳轉&#xff0c;就是打開某一個安卓手機應用&#xff0c;出現的歡迎界面停留幾秒鐘&#xff0c;自動進入應用程序的主界面。在網上看到很多種實現辦法&#xff0c;但是感覺這種方法還是比較簡單的。 在onCreate里設置個Timer&#xff0c;然后建立Int…

手機端刷recovery工具_MIUI/REDMIN手機玩機匯集

愿你刷機半生歸來仍是MIUI1解鎖篇解鎖Bootloader準備工作&#xff1a;1.手機備份數據2.手機進入開發者模式①進入“設置 -> 我的設備 -> 全部參數"中連續點擊MIUI版本&#xff0c;進入”開發者模式“②進入“設置 -> 開發者選項 -> 設備解鎖狀態”中綁定賬號和…

數據結構基礎:線性表學習筆記

1、線性表定義線性表是指n個元素的有限序列(n>0),通常用(a1,a2,a3...,an),來表示。2、線性表特點1、存在唯一的一個首元素2、存在唯一一個尾元素3、除第首元素外&#xff0c;每個元素只有一個直接前驅。4、除尾元素外&#xff0c;每個元素只有一個直接后繼。3、線性表的存儲…

c語言流水燈小程序,流水燈小程序.doc

流水燈小程序流水燈小程序#include void delay() //延時函數&#xff0c;這里延時100ms{int i,j;for(i0;i<100;i){for(j0;j<2242;j){} //j循環一次大概1ms}}void main(){ //這里看LED原理圖LPC_IOCON->JTAG_TMS_PIO1_00x01;//定義p1.0引腳為輸出LPC_IOCON->JTAG_TD…

iphone導出照片到電腦_iPhone里的照片如何快速導入電腦

前幾日我一好友發微信問我&#xff1a;“向陽&#xff0c;我手機里有一萬多張照片&#xff0c;怎么能快速的備份到電腦里&#xff1f;”我一看這問題&#xff0c;確實很多果友從用蘋果手機開始&#xff0c;機器已經更新換代了好多代了&#xff0c;照片是越來越多&#xff0c;內…

數據結構基礎:棧和隊列學習筆記

1、棧1.1 棧的定義棧是只能通過訪問它的一端來實現數據的存儲和檢索的一種特殊的線性數據結構。棧的修改要遵循先進后出的原則&#xff0c;這個是棧的核心。在棧中進行插入和刪除操作的一端稱為棧頂&#xff08;Top&#xff09;。另一端被稱為棧底&#xff08;bottom&#xff0…

Jquery高級編程

1.javascript具有等于&#xff08;&#xff09;和等同&#xff08;&#xff09;等號操作符是危險的&#xff0c;因為它在執行比較之前&#xff0c;強制執行類型轉換。 2.非侵擾式編程。 3.3.3Jquery的框架結構&#xff0c;待深入理解。 4.選擇器 a.元素選擇器&#xff08;元素屬…

C語言鏈表為什么倒著輸出,關于鏈表倒著存,正著輸出。

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓題目要求是你輸入a->b->c->d&#xff0c;然后存在內存里&#xff0c;然后改變在內存里的存儲&#xff0c;改成存d->c->b->a&#xff0c;然后輸出還是abcd&#xff0c;能不能就是用一個數組也存一份輸入的&#x…

idea @Autowired 注入爆紅(無法注入)

問題如下圖所示,idea Autowired 注入爆紅(無法注入) seettings ----> Editor Inspactions ----->spring ---->spring Core ----> Code ----> Autowring for Bean Class 去掉那個勾 效果如下

華為手機相冊怎么鏡像翻轉_怎么利用手機相冊制作電子視頻

怎么通過手機照片制作視頻&#xff1f;將照片做成視頻并不是很難&#xff0c;可以直接在手機上進行操作&#xff0c;下面來看看是怎么操作的。方法/步驟在手機上打開清爽視頻編輯器&#xff0c;有視頻編輯、美拍美攝、電子相冊、特效模板、動感視頻、創意視頻、動態字幕、視頻變…

Cluster_analysis

https://en.wikipedia.org/wiki/Cluster_analysis轉載于:https://www.cnblogs.com/WCFGROUP/p/5557907.html

數據結構基礎:樹結構的學習筆記

1、樹的定義樹是n(n>0)個節點的有限集合。當n0時稱為空樹&#xff0c;當n>0 為非空樹&#xff0c;任何非空樹中&#xff0c;有且僅有一個根節點&#xff1b;其余節點可分為m(m>0)個互不相交的有限集合T1、T2 等&#xff0c;其中每一個集合都可以稱為一棵樹&#xff0c…

android組件用法說明,Android第三方控件PhotoView使用方法詳解

Android第三方控件PhotoView使用方法詳解發布時間&#xff1a;2020-10-21 15:06:09來源&#xff1a;腳本之家閱讀&#xff1a;74作者&#xff1a;zhaihaohao1PhotoView的簡介&#xff1a;這是一個圖片查看庫&#xff0c;實現圖片瀏覽功能&#xff0c;支持pinch(捏合)手勢或者點…

idea中新建分支并且切換到新建的分支上

開發新功能,idea上新建自己的分支,要在dev分支上新建 首先,idea右下角可以看到目前在dev分支上 點擊dev,接著New Branch 輸入分支名 在Local Branches中就顯示了 然后可以看到已經切換到剛新建的分支上了 想要切換到剛新建的分支上開發時,可以點擊分支,在彈框上點擊Checkout

vnpy怎么創建策略并回測_【手把手教你】入門量化回測最強神器backtrader(一)

1 引言目前基于Python的量化回測框架有很多&#xff0c;開源框架有zipline、vnpy、pyalgotrader和backtrader等&#xff0c;而量化平臺有Quantopian&#xff08;國外&#xff09;、聚寬、萬礦、優礦、米筐、掘金等&#xff0c;這些量化框架或平臺各有優劣。就個人而言&#xff…