字串最短距離問題

2021-07-03 15:15:51 字數 1346 閱讀 9908

question:

設有字串x,稱在x的頭尾及中間插入任意多個空格後構成的新字串為x的擴充套件串,如字串x為「abcbcd」,則字串「abcb□cd」,「□a□bcbcd□」和「abcb□cd□」都是x的擴充套件串,這裡「□」代表空格字元。 如果a1是字串a的擴充套件串,b1是字串b的擴充套件串,a1與b1具有相同的長度,那麼定義字串a1與b1的距離為相應位置上的字元的距離總和,而兩個非空格字元的距離定義為它們的ascii碼的差的絕對值,而空格字元與其它任意字元之間的距離為已知的定值k,空格字元與空格字元的距離為0。在字串a、b的所有擴充套件串中,必定存在兩個等長的擴充套件串a1、b1,使得a1與b1之間的距離達到最小,將這一距離定義為字串a、b的距離。請編寫程式,求出字串a、b的距離。

input

每組資料輸入字串a1和b1以及常數k

output

輸出字串最短距離

sample:

input

cmc

snmn 2

output10

analysis:

假設串a1,b1具有最短距離,那麼a1[0],b1[0]只有如下三種情況:

case 1case 2case 3

aa1[0]

____ 

a1[0]

b      ____        b1[0]      b1[0]

每種情況我們需要求出後繼子串的最短距離加上當前字元的距離,就得倒最短距離。

偽**

strdis(s[0...slen],t[0...tlen])=min
**

#include #include #include #include #include #include #include using namespace std;

const int max=1050;int k,sum;

#define ll long long

#define clr(a,b) memset(a,b,sizeof(a))

int strdis(char *s,char *t)

if(s[0]=='\0'&&t[0]!='\0')

temp[0]=strdis(s+1,t)+k;

temp[1]=strdis(s,t+1)+k;

temp[2]=strdis(s+1,t+1)+abs(s[0]-t[0]);

sum=temp[0]

素數最短距離問題

素數距離問題 時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入第一行給出測試資料...

1407 最短距離

兩個點 a b 均在做勻速直線運動。給出 t 0時刻 a b 的座標,以及 a b 的速度,計算t 0時兩個點的距離的最小值。輸入的第一行包含乙個整數 t 1 t 200 表示一共有 t 組測試資料。對於每組測試資料,第一行包含4個整數 x a y a v ax v ay 103 x a y a v...

編輯最短距離

給定兩個字串s和t,對於t我們允許三種操作 1 在任意位置新增任意字元 2 刪除存在的任意字元 3 修改任意字元 問最少操作多少次可以把字串t變成s?例如 s abcf t dbfg 那麼我們可以 1 把d改為a 2 刪掉g 3 加入c 所以答案是3。1 把t中字元全刪了,再新增s的全部字元,操作次...