程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> HDU 4300 Clairewd’s message(KMP)

HDU 4300 Clairewd’s message(KMP)

編輯:關於C++

題意:給你一個26個字母的轉換表, 把'a'轉換成第一個字母, 把'b'轉換成第二個......以此類推。 第二行給你一個密文+明文的串, 並且明文有可能不完整, 讓你求明文最小的可能解。

思路:思路不是很難想, 就是把密文轉換成明文, 然後從中間開始對原串進行KMP, 直到最後一個字符時返回匹配的長度。 然後這個匹配的長度就是最短的明文長度。

細節參見代碼:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef long long ll;
typedef long double ld;
const ld eps = 1e-9, PI = 3.1415926535897932384626433832795;
const int mod = 1000000000 + 7;
const int INF = 0x3f3f3f3f;
// & 0x7FFFFFFF
const int seed = 131;
const ll INF64 = ll(1e18);
const int maxn = 1000000 + 10;
int n,t,m,f[maxn],ans;
char s[maxn],T[maxn];
void getfail(char *p, int m) {
    f[0] = f[1] = 0;
    for(int i=1;i

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved