codeforces MUH and Cube Walls

題意:給定兩個序列a ,b, 如果在a中存在一段連續的序列使得
a[i]-b[0]==k, a[i+1]-b[1]==k.... a[i+n-1]-b[n-1]==k
就說b串在a串中出現過!最后輸出b串在a串中出現幾次!

思路: KMP變形!如何轉換成KMP求解呢?
舉一個例子說明一下:
a: 5 10 8 10 11 9 11 12 10 15
b: 4 2 4 5 3
根據題意 a中的 10 8 10 11 9 與 b是匹配的, 11 9 11 12 10跟b也是匹配的!
如何將b串以及 10 8 10 11 9, 以及 11 9 11 12 10轉換成同一個串?這樣好套用kmp啊!
因為對應的數值的差值都是相同的! 令a[i]-=a[i+1], b[i]-=b[i+1]!
這樣也就是將串的長度減少了1,這樣就可以套kmp模板了!
別忘記對特殊情況考慮一下!

 1 #include<iostream>
 2 #include<cmath> 
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<cstring>
 6 #define N 200005
 7 using namespace std;
 8 
 9 int f[N], a[N], b[N];
10 int n, w;
11 void getFail(){
12     f[0]=0; f[1]=0;
13     for(int i=1; i<w; ++i){
14         int j=f[i];
15         while(j && b[i] != b[j]) j=f[j];
16         if(b[i] == b[j]) f[i+1] = j+1;
17         else f[i+1] = 0;
18     }
19 }
20 
21 void findText(){
22     int j=0;
23     int cnt = 0;
24     for(int i=0; i<n; ++i){
25         while(j && a[i] != b[j])  j=f[j];
26         if(a[i] == b[j]) ++j;
27         if( j == w ) ++cnt;
28     } 
29     printf("%d\n", cnt);
30 }
31 
32 int main(){
33     scanf("%d%d", &n, &w);
34     for(int i=0; i<n; ++i){
35         scanf("%d", &a[i]);
36         if(i) a[i-1] -= a[i];
37     }
38     
39     for(int i=0; i<w; ++i){
40         scanf("%d", &b[i]);
41         if(i) b[i-1] -= b[i];
42     }
43     if(n==1 && w==1){
44         printf("%d\n", 1);
45         return 0;
46     }
47     else if(n==1){
48         printf("%d\n", 0);
49         return 0;
50     }
51     else if( w==1 ){
52         printf("%d\n", n);
53         return 0;
54     }
55     --n;
56     --w;
57     b[w] = -1e6;    
58     getFail();
59     findText();
60     return 0;
61 }
View Code

?

轉載于:https://www.cnblogs.com/hujunzheng/p/3997196.html

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

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

相關文章

linux release 版本的區別,編譯debug版本和編譯release版本的區別

大項目的版本編譯會區別debug和release&#xff0c;那debug和release會有什么區別呢&#xff1f;通過對比這兩者的編譯選項可以找到答案。1.對比編譯過程debug:-DOS_LINUX -DDEBUG_VERSION -fno-builtin -pipe -Wall -fsigned-char -g-mlongcall -DCPUPPC85XX -mcpu8548 -m…

java模仿qq好友面板的布局(BoxLayout問題)

..............JLabel ll new JLabel(dlg.getNameText() ":" dlg.getIPText(), ii[index], JLabel.LEFT);tmp new JPanel();//將標簽添加到這個面板中tmp.setLayout(new FlowLayout(FlowLayout.CENTER));tmp.setBackground(new Color(255, 0, 255));/** BoxLayo…

linux apple開發環境,Objective-C開發環境設置

如果要安裝自己的Objective-C編程語言編程環境&#xff0c;則需要在計算機上安裝文本編輯器和GCC編譯器。1. 文本編輯器文本編輯器用于編寫程序代碼。一些常見的編輯器如&#xff1a;Windows Notepad&#xff0c;OS Edit命令&#xff0c;Brief&#xff0c;Epsilon&#xff0c;E…

codeforces C. Design Tutorial: Make It Nondeterministic

題意&#xff1a;每一個人 都有frist name 和 last name&#xff01; 從每一個人的名字中任意選擇 first name 或者 last name 作為這個人的編號&#xff01;通過對編號的排序&#xff0c;得到每一個人 最終順序&#xff01;比較中的序列能否得到給定輸出的序列一致&#xff01…

Linux系統擴硬盤,Linux系統硬盤擴容

1、查看硬盤已經用了99%$ df -h #查看硬盤已經使用了99%文件系統 容量 已用 可用 已用% 掛載點devtmpfs 2.0G 0 2.0G 0% /devtmpfs 2.0G 12K 2.0G 1% /dev/shmtmpfs 2.0G 11M 2.0G 1% /runtmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup/dev/mapper/centos-root 47G 47G 687M 99% / ####…

codeforce A. Design Tutorial: Learn from Math

題意&#xff1a;將一個數拆成兩個合數的和&#xff0c; 輸出這兩個數&#xff01;&#xff08;這道題做的真是TMD水啊&#xff09;開始的時候不知道composite numbers是啥意思&#xff0c;看了3遍才看懂.... 看懂之后又想用素數篩選法來做&#xff0c;后來決定單個判斷一個數是…

設置密碼命名是什么linux,orapwd 工具建立密碼文件遵守的命名方法

orapwd 工具建立建立的密碼文件 一定要orapw實例名嗎我在11g和10g 測試是必須要 orapw實例名 才能登錄成功以下是驗證過程[oracleasm dbs]$ rm orapwasm[oracleasm dbs]$ orapwd fileorapwdasm passwordabcdefg entries10[oracleasm dbs]$ sqlplus /nologSQL*Plus: Release 10.…

codeforces B. Design Tutorial: Learn from Life

題意&#xff1a;有一個電梯&#xff0c;每一個人都想乘電梯到達自己想要到達的樓層&#xff01;從a層到b層的時間是|a-b|&#xff0c; 乘客上下電梯的時間忽略不計&#xff01;問最少需要多少的時間.... 這是一道神題啊&#xff0c;自己的思路不知不覺的就按照注解的思路走…

arm linux 中斷優先級,ARM中斷處理過程

以s3c2440 ARM9核為例&#xff1a;一:s3c2440 ARM處理器特性&#xff1a;1、S3C2440支持60個中斷源&#xff0c;含子中斷源&#xff1b;2、ARM9采用五級流水線方式&#xff1b;3、支持外部中斷和內部中斷&#xff1b;二、s3c2440 支持的寄存器&#xff1a;2.1 外部中斷寄存器24…

codeforces D. Design Tutorial: Inverse the Problem

題意&#xff1a;給定一個矩陣&#xff0c;表示每兩個節點之間的權值距離&#xff0c;問是否可以對應生成一棵樹&#xff0c; 使得這棵樹中的任意兩點之間的距離和矩陣中的對應兩點的距離相等&#xff01; 思路&#xff1a;我們將給定的矩陣看成是一個圖&#xff0c;a 到 b會有…

linux ssh 遠程會話保存,遠程SSH會話和流程在斷開后運行的5種方法

SSH或安全Shell簡單來說就是一個人可以遠程訪問其他用戶的其他系統&#xff0c;但僅在命令行即非GUI模式的方法。 在更多的技術術語中&#xff0c;當我們ssh到其他用戶在某些其他系統上并在該機器上運行命令時&#xff0c;它實際上創建一個偽終端并將其附加到登錄用戶的登錄she…

java模擬一個簡單的QQ

v 項目源碼https://github.com/hjzgg/java_QQ v 標題效果package testFour;import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.I…

修改Linux啟動后的默認顏色,更改linux目錄的默認顏色(我選擇了Yellow)

在控制臺下&#xff0c;用ls&#xff0c;就會發現&#xff0c;shell將不同類型的文件項目顯示為不同的顏色。者可以提高效率&#xff0c;不用ls -l便能大概的把各個文件的類型情況了解一下。你有沒有想過更改這個著色配置呢&#xff1f;其 實&#xff0c;在/etc下有一個DIR_COL…

AC_Dream 1216 G - Beautiful People

題意&#xff1a;有n個人每人有一個力氣值Si,美麗值Bi&#xff0c;滿足Bi>Bj&&Si>Sj 或者 Bi<Bj&&Si<Sj 的人可以一起參見晚會&#xff0c;問最多有多少人可以一起參見晚會。思路&#xff1a; 我們根據S從小到大將所有人排序&#xff0c;然后看B最…

云主機用linux還是winows,云服務器一般使用什么系統?Linux還是Windows?

云服務器一般使用什么系統?最常用的就是Linux以及Windows系統&#xff0c;兩大系統各有不同優勢&#xff0c;大家選擇上也是存在差異的&#xff0c;接下來跟著小編來了解一下吧。Windows系統&#xff1a;一般情況來說&#xff0c;Windows系統常用的是Server 2003和Server 2008…

c語言程序中return的作用,單片機C語言程序中return dat 什么意思

/* 打開 ISP,IAP 功能 */void ISP_IAP_enable(void){EA 0; /* 關中斷 */ISP_CONTR ISP_CONTR & 0x18; /* 0001,1000 */ISP_CONTR ISP_CONTR | WaitTime; /* 寫入硬件延時 */ISP_CONTR ISP_CONTR | 0x80; /* ISPEN1 */}/* 關閉 ISP,IAP 功能 *…

java中DatagramSocket連續發送多個數據報包時產生丟包現象解決方案

1 try {2 //向指定的ip和端口發送數據~&#xff01;3 //先說明一下數據是誰發送過來的&#xff01;4 byte[] ip InetAddress.getLocalHost().getHostAddress().getBytes();5 …

二級c語言程序設計bug,《C語言及程序設計》實踐項目——發現Bug

返回&#xff1a;賀老師課程教學鏈接【項目1-sin泰勒展式中的錯誤】下面是sin函數的泰勒展式&#xff1a;(注&#xff1a;x取弧度值&#xff0c;而非角度值)編寫了double mysin(double x)用于求sin值&#xff0c;卻“死”在了123上。劇透一下&#xff0c;循環沒有問題(當然問題…

AC_Dream 1224 Robbers(貪心)

題意&#xff1a;n個搶劫犯分別搶到的金錢是k1, k2, k3,...&#xff0c;一共得到的金錢是m&#xff0c; 但是在分錢的時候是按照x1/y, x2/y, x3/y,....的比例進行分配的&#xff01;這樣的話 一些搶劫犯就會覺得不公平&#xff0c;不公平度為|xi/y - ki/m|(浮點運算)&#xff0…

C語言編程出圖形,C語言畫出各種圖形

矩形&#xff1a;(里面是空的)******** ** ** ********Program ended with exit code: 0for (int i 0; i < 5; i ) {for (int j 0; j < 7; j ) {//用條件判斷打出*號if (i 0 || i 4 || j 0 || j 6 ) {printf("*");}else{printf(" "…