日常訓練 壓縮

2021-08-04 04:19:47 字數 1523 閱讀 6402

巨大的文字往往令人頭疼,特別是文字內容有大量重複的情況下,巨大的文字不便於運輸和閱讀,於是我們提出了noip(nonsense obivous index pattern(荒謬的顯然索引法)),一種「有效的」壓縮文字的方法。

noip壓縮後的格式很特別,乙個文字壓縮後由若干個單元組成,每個單元由3部分組成:1.正文(小寫字母組成的字串)2.若干個「*」,表示正文的又重複了幾次3.單元的結尾符號「#」

比如,noip壓縮後的文字hello**#yes#no****#的含義是「hello」重複3次,yes重複1次,no重複5次,解壓後就變成hellohellohelloyesnonononono。

顯然,對於同一文字,壓縮後的表示方法不唯一,但是為了方便,我們要求你採用壓縮後字串最短的壓縮方法,如果有多種壓縮方法,只需輸出任意一種。(special judge)

乙個字串,只含小寫字母,表示原來的文字。

乙個字串,表示一種最短的壓縮後文字。(special judge)

aaaa

aa*#

除此外還有多種壓縮方法,但是長度都比樣例輸出長,以下列舉其中幾種:

a***#

aaaa#

a**#a#

hellohellohelloyesnonononono

hello**#yes#no****#

記len為讀入的字串長度。

20%的資料,len<=10

70%的資料,len<=200

100%的資料,len<=2000

#include 

#include

#include

using

namespace

std;

typedef

unsigned

long

long ull;

const

int maxn = 0x3f3f3f3f;

const

int n = 2005;

ull p[n], h[n]; char s[n];

int len[n][n], apr[n][n], str[n][n], ret[n], stk[n], f[n];

int tmp, top, n;

inline ull hash(const

int &x, const

int &y)

int main()

}f[0] = 0; f[1] = 2;

for (int i = 2; i <= n; ++i)

for (int j = 1; j <= i; ++j)

for (int i = n; i; i = ret[i]) stk[++top] = i;

// stk[top…1]表示按位置順序的最優決策

tmp = 1;

for (int i = top; i >= 1; --i)

fclose(stdin); fclose(stdout);

return

0;}

日常訓練 Tree

j 對於h u j 時間複雜度的證明也是比較經典了,每次列舉的是sz eu s zev 相當於每次從a,b 中各任選一點,它們的lc a 為 u 這樣的點對列舉不會重複,因此總的時間複雜度為o n2 include include include include include using name...

日常訓練 mod

給定 p 1,p 2,p n,b 1,b 2,b m 求滿足 x mod p 1 equiv a 1,x mod p 2 equiv a 2,x mod p n equiv a n 的 x 對 b 1,b 2,b m 取模的結果.第一行兩個整數 n,m 接下來 n 行,每行有乙個整數 a i 接下來...

日常訓練 school

description 眾所周知,家離學校很遠。於是,每天算準了時間出發,以保證能在上課鈴響前 秒到達學校。不幸的是,市最近正在修路。這就導致有些路可能無法通行,因而可能導致 遲到。不打算改變他的出發時間,現在他告訴你他通過每一條路的時間,他想要知道如果某條路被維修了,那麼他是否能避免遲到?inpu...