鱼C论坛

 找回密码
 立即注册
查看: 3661|回复: 6

有一个测试点没过

[复制链接]
发表于 2022-10-30 15:42:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 姜璟 于 2022-10-30 15:42 编辑

英文题目

英文题目

翻译后题目

翻译后题目

示例

示例

屏幕截图_20221030_152931.png
  1. n=int(input())
  2. while n!=0:
  3.     s=input()
  4.     s=list(s)
  5.     f=2
  6.     while(f!=1):

  7.         if len(s)%2!=0:
  8.             f=0
  9.             break
  10.         if '(' in s:
  11.             if ')' not in s:
  12.                 f=0
  13.                 break
  14.             else:
  15.                 if s.index('(')>s.index(')'):
  16.                     f=0
  17.                     break
  18.                 else: f=1
  19.         if ')' in s:
  20.             if '(' not in s:
  21.                 f=0
  22.                 break
  23.             
  24.         if '[' in s:
  25.             if ']' not in s:
  26.                 f=0
  27.                 break
  28.             else:
  29.                 if s.index('[')>s.index(']'):
  30.                     f=0
  31.                     break
  32.                 else: f=1
  33.         if ']' in s:
  34.             if '[' not in s:
  35.                 f=0
  36.                 break
  37.             
  38.         if '{' in s:
  39.             if '}' not in s:
  40.                 f=0
  41.                 break
  42.             else:
  43.                 if s.index('{')>s.index('}'):
  44.                     f=0
  45.                     break
  46.                 else: f=1
  47.         if '}' in s:
  48.             if '{' not in s:
  49.                 f=0
  50.                 break
  51.             
  52.     if f==1:
  53.         print("YES",end='')
  54.     if f==0:
  55.         print("NO",end='')
  56.     n-=1
  57.     if n!=0:print()
复制代码
还有什么条件没想到吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-30 16:09:40 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-30 16:17 编辑

        这个题配合字典 + 列表非常简单
  1. d , x = {'}' : '{' , ']' : '[' , ')' : '('} , []
  2. for _ in range(int(input())) : x . append(input())
  3. for s in x:
  4.     e , f = [] , True
  5.     for x in s:
  6.         if x in '{[(':
  7.             e . append(x)
  8.         else:
  9.             if not e or d[x] != e . pop() :
  10.                  f = False
  11.                  break
  12.     print('Yes') if not e and f else print('No')
复制代码

        运行实况:
  1. D:\[00.Exerciese.2022]\Python>python x.py
  2. 4
  3. ({})
  4. {{}}
  5. ({[}])
  6. }{
  7. Yes
  8. Yes
  9. No
  10. No

  11. D:\[00.Exerciese.2022]\Python>
复制代码

        样例 3 的判定结果显然是错的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-30 16:30:03 | 显示全部楼层
jackz007 发表于 2022-10-30 16:09
这个题配合字典 + 列表非常简单

        运行实况:

题目里规定这样是正确的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 16:43:15 | 显示全部楼层
姜璟 发表于 2022-10-30 16:30
题目里规定这样是正确的

         完全不可能,括号必须同类型顺序成对匹配,这样才会有意义,否则,就是乱套!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 17:05:11 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-30 18:28 编辑
姜璟 发表于 2022-10-30 16:30
题目里规定这样是正确的

  1. d , x = {'}' : '{' , ']' : '[' , ')' : '('} , []
  2. for _ in range(int(input())) : x . append(input())
  3. for s in x:
  4.     e , f = [] , True
  5.     for x in s:
  6.         if x in '{[(':
  7.             e . append(x)
  8.         else:
  9.             if d[x] in e : e . remove(d[x])
  10.             else :
  11.                 f = False
  12.                 break
  13.     print('Yes') if not e and f else print('No')
复制代码

        运行实况:
  1. D:\[00.Exerciese.2022]\Python>python x.py
  2. 4
  3. ({})
  4. {{}}
  5. ({[}])
  6. }{
  7. Yes
  8. Yes
  9. Yes
  10. No

  11. D:\[00.Exerciese.2022]\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 18:22:38 | 显示全部楼层
本帖最后由 阿奇_o 于 2022-10-30 18:23 编辑
  1. # 思路:典型的入栈出栈问题
  2. # 解决:
  3. def f():
  4.     # n = int(input())
  5.     # ps = [input().strip() for _ in range(n)]
  6.     ps = "({}),{{}},({[}]),}{,{(})[{(}])".split(',')   # 方便测试,直接写测试用例
  7.     for p in ps:
  8.         cnt, ls = 0, []   # ls为"栈",cnt保存"对数"
  9.         for i in p:
  10.             # 入栈
  11.             if i in '{([': ls.append(i)
  12.             # 出栈
  13.             if i == '}' and '{' in ls: ls.remove('{'); cnt += 1
  14.             if i == ')' and '(' in ls: ls.remove('('); cnt += 1
  15.             if i == ']' and '[' in ls: ls.remove('['); cnt += 1

  16.         # print(p, f'\t--> Yes 共{cnt}对' if len(ls)==0 else '\t--> No', )      # 是否有效判断 方法一
  17.         print(p, f'\t--> Yes 共{cnt}对' if cnt==len(p)/2 else '\t--> No', )     # 方法二
  18.         # 注:如果只用方法二判断,实际上可以不进行出栈操作,即ls.remove()可省去,只用cnt统计好即可
  19. f()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-31 01:57:04 | 显示全部楼层
原本以为你这个题目考的是栈结构,仔细一看 考的是贪心 (如果需要输出多少对而不是YesNo)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 02:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表