2011年6月3日 星期五

ACM 11661 Burger Time?

一個字母一個字母去做。
如果讀到D,就看看在這之前是否有R被讀到,若有R則計算D到R的距離並和min比大小,取較小者﹔反之,若沒有R在之前被讀到,這樣的話什麼事情都不用做。無論是上面兩種情況中的任何一種,做完以後都要把D的位置紀錄下來。

如果讀到R,就看看在這之前是否有D被讀到,若有D則計算R到D的距離並和min比大小,取較小者﹔反之,若沒有D在之前被讀到,這樣的話什麼事情都不用做。無論是上面兩種情況中的任何一種,做完以後都要把R的位置紀錄下來。

#include <stdio.h>

int min(int a, int b)
{
    if (a > b)
        return b;
    else
        return a;
}

int main(void)
{
    char ch;
    int i, r, d, n, m, s;
   
    while (scanf("%d", &n) == 1 && n)
    {
        getchar();
        r = d = -1;
        i = 0;
        m = 2000001;
        while ((ch = getchar()) != '\n' && i < n)
        {
            if (ch == 'Z')
            {
                m = 0;
                while (getchar() != '\n')
                    continue;
                break;

            }
            else if (ch == 'D')
            {
                if (r >= 0)
                {
                    s = i-r;
                    m = min(m, s);
                    r = -1;
                }
                d = i;
            }
            else if (ch == 'R')
            {
                if (d >= 0)
                {
                    s = i-d;
                    m = min(m, s);
                    d = -1;
                }
                r = i;
            }
            i++;
        }
        printf("%d\n", m);
    }
   
    return 0;
}

沒有留言:

張貼留言