sfqxx 发表于 2023-4-15 20:58:02

谁能帮我优化一下代码,重重有赏!

链接->https://atcoder.jp/contests/abc298/tasks/abc298_d
我的代码:
mod = 998244353
s = "1"
q = int(input())

for i in range(q):
    query = input().split()
    if query == "1":
      s += query
    elif query == "2":
      s = s
    else:
      num = int(s) % mod
      print(num)
TLE了,有哪位大神帮我优化一下代码,谢谢!

liuhongrun2022 发表于 2023-4-15 20:58:03

本帖最后由 liuhongrun2022 于 2023-4-15 21:46 编辑

注:并非我写
实测 AC
from collections import deque

mod = 998244353
arr = deque()
num = 1

q = int(input())

for i in range(q):
    op = input().split()
    if op == '1':
      x = int(op)
      arr.append(x)
      num = (num * 10 + x) % mod
    elif op == '2':
      x = arr.popleft()
      num = ((num - x * pow(10, len(arr), mod)) % mod + mod) % mod
    else:
      print(num)

sfqxx 发表于 2023-4-15 21:00:28

liuhongrun2022 发表于 2023-4-15 21:13:47

进去链接404了

sfqxx 发表于 2023-4-15 21:17:58

liuhongrun2022 发表于 2023-4-15 21:13
进去链接404了

稍等

liuhongrun2022 发表于 2023-4-15 21:18:53

sfqxx 发表于 2023-4-15 21:17
稍等

能用了

sfqxx 发表于 2023-4-15 21:30:47

liuhongrun2022 发表于 2023-4-15 21:18
能用了

会吗?

liuhongrun2022 发表于 2023-4-15 21:40:35

本帖最后由 liuhongrun2022 于 2023-4-15 21:41 编辑

sfqxx 发表于 2023-4-15 21:30
会吗?

AC,但是问了gpt

isdkz 发表于 2023-4-15 21:45:39

你的代码已经很好了,但是可以使用一个变量来记录当前的字符串长度,从而避免在每次删除首位数字时都需要切片。以下是优化后的代码:

mod = 998244353
s = "1"
length = 1
q = int(input())

for i in range(q):
    query = input().split()
    if query == "1":
      s += query
      length += 1
    elif query == "2":
      s = s
      length -= 1
    else:
      num = int(s) % mod
      print(num)

这个优化可以提高代码的性能,因为在每次删除首位数字时,不再需要对整个字符串进行切片。

sfqxx 发表于 2023-4-15 22:26:36

isdkz 发表于 2023-4-15 21:45
你的代码已经很好了,但是可以使用一个变量来记录当前的字符串长度,从而避免在每次删除首位数字时都需要切 ...

你的代码RE了

sfqxx 发表于 2023-4-15 22:27:16

liuhongrun2022 发表于 2023-4-15 20:58
注:并非我写
实测 AC

哪个GPT,这么厉害?

isdkz 发表于 2023-4-15 22:38:12

sfqxx 发表于 2023-4-15 22:26
你的代码RE了

试试这个:

from collections import deque
import array

mod = 998244353
s = deque(array.array("I", ))# 使用array模块创建整数数组
current_mod = 1
q = int(input())

# 预计算10的幂次模值
pow_10_mod =
for _ in range(q):
    pow_10_mod.append((pow_10_mod[-1] * 10) % mod)

for i in range(q):
    query = input().split()
    if query == "1":
      s.append(int(query))
      current_mod = (current_mod * 10 + int(query)) % mod
    elif query == "2":
      current_mod = (current_mod - s.popleft() * pow_10_mod) % mod
    else:
      print(current_mod)

sfqxx 发表于 2023-4-15 22:46:46

isdkz 发表于 2023-4-15 22:38
试试这个:

isdkz 发表于 2023-4-15 23:14:46

sfqxx 发表于 2023-4-15 22:46


好吧,难道我的gpt不够厉害,还是我不会问?{:10_277:}

sfqxx 发表于 2023-4-15 23:17:10

isdkz 发表于 2023-4-15 23:14
好吧,难道我的gpt不够厉害,还是我不会问?

我觉得是……
题目的问题{:10_244:}

sfqxx 发表于 2023-4-15 23:17:53

isdkz 发表于 2023-4-15 23:14
好吧,难道我的gpt不够厉害,还是我不会问?

你重新问问试试看?
所有题目,信息都复制进去

isdkz 发表于 2023-4-15 23:22:55

sfqxx 发表于 2023-4-15 23:17
你重新问问试试看?
所有题目,信息都复制进去

我全部复制进去了,连着问好几次得到的代码才能AC,评测不如liuhongrun2022的那个代码优

sfqxx 发表于 2023-4-15 23:25:18

isdkz 发表于 2023-4-15 23:22
我全部复制进去了,连着问好几次得到的代码才能AC,评测不如liuhongrun2022的那个代码优

到时候问问他吧
对了,qq通过一下
您的chATgpt是那个网页的?

isdkz 发表于 2023-4-15 23:26:13

sfqxx 发表于 2023-4-15 23:25
到时候问问他吧
对了,qq通过一下
您的chATgpt是那个网页的?

ai.com

isdkz 发表于 2023-4-15 23:27:54

sfqxx 发表于 2023-4-15 23:25
到时候问问他吧
对了,qq通过一下
您的chATgpt是那个网页的?

你确定你有加我?我都没有收到请求
页: [1] 2
查看完整版本: 谁能帮我优化一下代码,重重有赏!