巨大的文字往往令人頭疼,特別是文字內容有大量重複的情況下,巨大的文字不便於運輸和閱讀,於是我們提出了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...