专栏文章

UVA11661 Burger Time?题解

UVA11661题解参与者 3已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@miqrsicf
此快照首次捕获于
2025/12/04 09:41
3 个月前
此快照最后确认于
2025/12/04 09:41
3 个月前
查看原文
我的博客中食用更佳。

题意

给定若干个长度为 ll 的字符串,其间 R 表示餐厅,D 表示药店,Z 表示两者,. 代表空地。

思路

先是一个 while 循环输入 ll,里面定义一个 ansans 表示最终答案,rrdd 分别表示餐厅位置和药店位置,再输入字符串 ss,把 ss 的每一个字符遍历一遍。
如果那个字符是 Z 就直接 ansans 设为 00 后退出循环。
R 或者 D 的时候就分别把 rr 或者 dd 赋值为当前循环的次数 ii
每次循环时如果 rrdd 已经有值了就把 ansans 赋值为 min(ans,rd)\min(ans, |r - d|)
注意哦,ansans 初始要赋值为一个较大的值,不然在取最小值的时候会错。

Code

CPP
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
    int l;
    cin >> l;
    while(l != 0)
    {
        int r = -1, d = -1, ans = 1e9;
        string s;
        cin >> s;
        for(int i = 0; i < l; i++)
        {
            if(s[i] == 'Z')
            {
                ans = 0;
                break;
            }
            if(s[i] == 'D')
            {
                d = i;
            }
            else if(s[i] == 'R')
            {
                r = i;
            }
            if(r != -1 && d != -1)
            {
                ans = min(abs(r - d), ans);
            }
        }
        if(ans == 1e9)//一间都没有
        {
             ans = 0;
        }
        cout << ans << "\n";
        cin >> l;
    }
    return 0;
}
如有不严谨之处欢迎指出,审核大大求通过。

评论

2 条评论,欢迎与作者交流。

正在加载评论...