2019 12 7 玩具取名

2022-05-08 19:57:06 字數 1766 閱讀 7744

某人有一套玩具,並想法給玩具命名。首先他選擇\(wing\)四個字母中的任意乙個字母作為玩具的基本名字。然後他會根據自己的喜好,將名字中任意乙個字母用\(「wing」\)中任意兩個字母代替,使得自己的名字能夠擴充得很長。

現在,他想請你猜猜某乙個很長的名字,最初可能是由哪幾個字母變形過來的。

第一行四個整數\(w,i,n,g\)。表示每乙個字母能由幾種兩個字母所替代。

接下來\(w\)行,每行兩個字母,表示\(w\)可以用這兩個字母替代。

接下來\(i\)行,每行兩個字母,表示\(i\)可以用這兩個字母替代。

接下來\(n\)行,每行兩個字母,表示\(n\)可以用這兩個字母替代。

接下來\(g\)行,每行兩個字母,表示\(g\)可以用這兩個字母替代。

最後一行乙個長度不超過\(len\)的字串。表示這個玩具的名字。

一行字串,該名字可能由哪些字母變形而得到。(按照\(wing\)的順序輸出)

如果給的名字不能由任何乙個字母變形而得到則輸出\(「the\)

\(name\)

\(is\)

\(wrong!」\)

輸入 #1

1 1 1 1

iiww

wwig

iiii

輸出 #1

in
\(30\%\)資料滿足\(len\leq 20\),\(w,i,n,g\leq 6\)

\(100\%\)資料滿足\(len\leq 200\),\(w,i,n,g\leq 16\)

考場上此題被放在了\(t3\),於是沒有好好想。結果發現非常水。

簡單的區間\(dp\),符合基本的合併規律。我們用\(dp[i][j][k]\)表示區間\([i,j]\)能否合成第\(k\)號字母。我們列舉中間的端點即可。

#include#include#include#include#include#include#define int long long

#define rep(i,a,n) for(register int i=a;i<=n;++i)

#define dwn(i,n,a) for(register int i=n;i>=a;--i)

using namespace std;

int w,i,n,g,dp[405][405][10];

int e[405][405][10];

char name[1050],str[1050];

static const char let[5]=;//標記四個字元的編號

inline int read()

while(isdigit(ch))

return x*f;

}void write(int x)

signed main()

rep(i,2,len)}}

}} }

if(!(dp[1][len][1]|dp[1][len][2]|dp[1][len][3]|dp[1][len][4]))puts("the name is wrong!");

if(dp[1][len][1])putchar('w');

if(dp[1][len][2])putchar('i');

if(dp[1][len][3])putchar('n');

if(dp[1][len][4])putchar('g');

return 0;

}

自己卡一下常數。加油。

HAOI2008 玩具取名

haoi2008 玩具取名 時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld某人有一套玩具,並想法給玩具命名。首先他選擇wing四個字母中的任意乙個字母作為玩具的基本名字。然後他會根據自己的喜好,將名字中任意乙個字...

BZOJ1055 HAOI 玩具取名

某人有一套玩具,並想法給玩具命名。首先他選擇wing四個字母中的任意乙個字母作為玩具的基本名字。然後 他會根據自己的喜好,將名字中任意乙個字母用 wing 中任意兩個字母代替,使得自己的名字能夠擴充得很長。現在,他想請你猜猜某乙個很長的名字,最初可能是由哪幾個字母變形過來的。第一行四個整數w i n...

區間dp HAOI2008 玩具取名

簡單的區間合併,因為最終結果的長度最多為4,所以dp設為3維,dp i j k 表示 i,j 區間內能否由k這個字母產生。include using namespace std typedef long long ll 三年競賽一場空,不開long long見祖宗 typedef int128 ll...