• ECNU 2449 sunny的食品罐


    ECNU 2449 sunny的食品罐

    链接

    https://acm.ecnu.edu.cn/problem/2449

    题目

    单点时限: 2.0 sec

    内存限制: 256 MB

    sunny 非常喜欢吃零食,有时候会一下子买好多零食,所以有些会吃不完,本着节约的原则,他把这些吃不完的零食用特殊的罐头装起来,等以后再吃。罐头有三种,分别用{},[],() 表示,当罐头里面装了零食之后,就变成了{CHOCOLATE}, 或者 [ POTATOCHIPS], 或者 (COKE), 这种罐头的材质很特殊,对食品不会产生污染,所以可以把食品用罐头装起来之后,放到另一个装有食品的罐头里,例如{CHOCOLATEPOTATOCHIPS}, 其中 CHOCOLATE 被放在{}罐头中,POTATOCHIPS 被放在 [] 罐头中,那么 COKE 当然被放在了 () 罐头中。但是在使用这种罐头的时候必须小心,罐头的盖子必须要盖起来,比如一个罐头的左盖子必须对应该罐头的右盖头,也就是不能出现这种{CHOCOLATE[POTATO(COKE)},食品罐头的盖子没有盖全,会导致里面的食品变质,sunny 就不要吃了。

    一天,sunny 从柜子里翻出好多罐子,这都是他以前保存的零食,他怀疑有些罐头由于当初没有盖好盖子,里面的零食已经变质,不能吃了。但是由于数量太多,手工检查起来太麻烦,于是他想请你帮他写个程序,来检测这些罐头里面的食品是否能吃。

    特别需要注意的地方:

    (1) 左右两个盖子不能互换,比如)COKE(是不允许的 ,[ (APPLE)COKE(ORANGE)] 是允许的 ,COKE 其实是放在 [] 中。

    (2) 必须配套使用,用{的左盖子,右盖子一定要是},其他两种盖子也是一样。

    (3) 罐头里不放食品是允许的。

    (4) 用正确的方法储存起来的食品,将永远不会变质。

    (5) 只要用了左盖子,就一定要用右盖子;用了右盖子,也一定要用左盖子,否则也不能正常保存食品。

    输入格式
    第一行有一个整数 k, 表示有 k 组罐头 (0 < k <= 100)。

    第二行到第 k+1 行,每行一个字符串,每个字符串表示一组待检查的罐头,字符串由 ‘A’…’Z’, 以及 ‘{‘,’}’,’[‘,’]’,’(‘,’)’ 组成。题目保证,一组罐头中,至少会有一种零食,一个罐头里只会放一种零食或者不放。(字符串长度不大于 1000)

    输出格式
    对应每组罐头,输出一行,假如食品还能吃,就输出 “YES”, 否则输出 “NO”.

    样例
    input
    5
    {CHOCOLATE[POTATO(COKE)}
    {CHOCOLATE}
    {CHOCOLATE{CHOCOLATE}
    {CHOCOLATE[()}
    {CHOCOLATECOKE}
    output
    NO
    YES
    NO
    NO
    YES

    思路

    标准的栈,先进后出,用括号匹配的思想就行了,左括号入栈,右括号就检测,栈顶是相同的左括号就出栈,不然匹配失败,失败就是no。
    匹配到最后,栈也空了,那就是yes

    代码

     public static void fun() {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
          boolean flag = true;
          String str = sc.next();
          Stack<Character> stack = new Stack<>();
          StringBuffer sb = new StringBuffer(str);
          for (int j = 0; j < sb.length(); j++) {
            char tmp = sb.charAt(j);
            if (tmp == '{' || tmp == '[' || tmp == '(') {
              stack.push(tmp);
            } else if (tmp > 'Z' || tmp < 'A') {
              if (stack.empty()) {
                flag = false;
                break;
              } else {
                if (tmp == '}') {
                  if (stack.pop() != '{') {
                    flag = false;
                    break;
                  }
                } else if (tmp == ']') {
                  if (stack.pop() != '[') {
                    flag = false;
                    break;
                  }
                } else if (tmp == ')') {
                  if (stack.pop() != '(') {
                    flag = false;
                    break;
                  }
                }
              }
            }
          }
          if (flag && stack.empty()) {
            System.out.println("YES");
          } else {
            System.out.println("NO");
          }
        }
    
      }
    
  • 相关阅读:
    MySQL备份与恢复(5)mysqldump的关键参数说明
    MySQL备份与恢复(4)mysqldump备份表
    MySQL备份与恢复(3)mysqldump备份多个库
    MySQL备份与恢复(2)mysqldump多个命令参数
    MySQL备份与恢复(1)意义及重要性
    Redis(二)
    Redis(一)
    前端像素单位之间的区别
    Matplotlib
    解决问题:[Vue warn]: Error in beforeUpdate hook: "TypeError: Cannot read property 'setAttribute' of undefined"
  • 原文地址:https://www.cnblogs.com/blogxjc/p/14358772.html
Copyright © 2020-2023  润新知