1. 程式人生 > >無盡走廊(C語言)

無盡走廊(C語言)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
    int t,k,i,j,p,x[10001],min;
    char a[10001];
    while(scanf("%d",&t)!=EOF)
    {
        for(i=0;i<t;i++)
        {
            scanf("%s%d",a,&k);
            x[0]=0;j=1;
            while(a[j]!='\0')
            {
                min=abs(a[j]-a[j-1])+x[j-1];
                for(p=j;p>j-k;p--)
                    if((x[p-1]+abs(a[j]-a[p-1]))<min)
                    min=x[p-1]+abs(a[j]-a[p-1]);
                x[j]=min;
                j++;
            }
            min=x[1];p=strlen(a);
            for(j=0;j<p;j++)
            printf("%d\n",x[j]);
        }
    }


    return 0;

}



無盡走廊

Time Limit: 1000MS Memory limit: 65536K

題目描述

    2006年,我們可以稱之為“帆“船年。一艘艘友誼的小船都在這一年翻掉了(當然也有昇華為巨輪的)。然而這種事註定與小魚無緣,就在不久前,小魚與小驢剛吵了一架,在爭吵的過程中,小魚與小驢友誼的小木船失衡翻掉了。小魚與小驢墜入大海,小魚醒來後發現小驢不見了,慌張的小魚四處尋找小驢,但小魚發現小驢並不在小魚身邊。此時小魚發現自己在一個大大的走廊盡頭,走廊那邊是無盡的黑暗,而小魚身旁的一個告示牌上有如下內容:
    親愛的人類啊~歡迎來到海洋之邸~想要找到你的朋友麼~那就穿越這條無盡走廊吧~下面有一張魔法地圖~可以帶你通向海底堡~你的朋友就在那裡等著你那~下面有一張魔法地圖~可以帶你離開這裡~
    小魚撿起地圖,發現這條走廊是由好幾條小走廊組成,地圖上每條小走廊由一個大寫英文字母表示。而小魚現在在第一個字母處,出口在最後一個字母。
    地圖上說,每個小走廊都有一扇時空之門,可以跳轉到當前走廊往後第1~k個走廊處。而所需要的時間為兩走廊字母編號的距離。譬如A走廊與B走廊間花費為1 Z與A花費為25 C與A花費為2。
    小魚現在十分後悔跟小驢吵架。急切地想要找到小驢,你能幫小魚算出一種方案,能夠儘快找到小驢麼?

輸入

多組輸入。
先輸入一個整數T,表示組數。
之後每組先輸入一個字串(0 < 串長 <= 10^4),之後輸入一個整數k(1 <= k <= 串長)表示每次最遠移動距離。
每組輸入佔一行,以空格隔開。

輸出

對於每組輸入,輸出一個正整數表示小魚找到小驢的最短時間。每組輸出佔一行。

示例輸入

3
ACA 1
ACA 2
ABCA 2

示例輸出

4
0
2