鱼C论坛

 找回密码
 立即注册
查看: 3025|回复: 30

[已解决]谁能帮我优化一下代码,重重有赏!

[复制链接]
发表于 2023-4-15 20:58:02 | 显示全部楼层 |阅读模式
10鱼币
链接->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[0] == "1":
        s += query[1]
    elif query[0] == "2":
        s = s[1:]
    else:
        num = int(s) % mod
        print(num)
TLE了,有哪位大神帮我优化一下代码,谢谢!
最佳答案
2023-4-15 20:58:03
本帖最后由 liuhongrun2022 于 2023-4-15 21:46 编辑

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

mod = 998244353
arr = deque([1])
num = 1

q = int(input())

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

最佳答案

查看完整内容

注:并非我写 实测 AC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 20:58:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 liuhongrun2022 于 2023-4-15 21:46 编辑

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

mod = 998244353
arr = deque([1])
num = 1

q = int(input())

for i in range(q):
    op = input().split()
    if op[0] == '1':
        x = int(op[1])
        arr.append(x)
        num = (num * 10 + x) % mod
    elif op[0] == '2':
        x = arr.popleft()
        num = ((num - x * pow(10, len(arr), mod)) % mod + mod) % mod
    else:
        print(num)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-15 21:00:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 21:13:47 | 显示全部楼层
进去链接404了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-15 21:17:58 | 显示全部楼层

稍等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 21:18:53 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-15 21:30:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 21:40:35 | 显示全部楼层
本帖最后由 liuhongrun2022 于 2023-4-15 21:41 编辑


AC,但是问了gpt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[0] == "1":
        s += query[1]
        length += 1
    elif query[0] == "2":
        s = s[length - 1:]
        length -= 1
    else:
        num = int(s) % mod
        print(num)

这个优化可以提高代码的性能,因为在每次删除首位数字时,不再需要对整个字符串进行切片。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

你的代码RE了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-15 22:27:16 | 显示全部楼层
liuhongrun2022 发表于 2023-4-15 20:58
注:并非我写
实测 AC

哪个GPT,这么厉害?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 22:38:12 | 显示全部楼层

试试这个:
from collections import deque
import array

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

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

for i in range(q):
    query = input().split()
    if query[0] == "1":
        s.append(int(query[1]))
        current_mod = (current_mod * 10 + int(query[1])) % mod
    elif query[0] == "2":
        current_mod = (current_mod - s.popleft() * pow_10_mod[len(s) - 1]) % mod
    else:
        print(current_mod)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-15 22:46:46 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 23:14:46 | 显示全部楼层

好吧,难道我的gpt不够厉害,还是我不会问?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-15 23:17:10 | 显示全部楼层
isdkz 发表于 2023-4-15 23:14
好吧,难道我的gpt不够厉害,还是我不会问?

我觉得是……
题目的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-15 23:17:53 | 显示全部楼层
isdkz 发表于 2023-4-15 23:14
好吧,难道我的gpt不够厉害,还是我不会问?

你重新问问试试看?
所有题目,信息都复制进去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 23:22:55 | 显示全部楼层
sfqxx 发表于 2023-4-15 23:17
你重新问问试试看?
所有题目,信息都复制进去

我全部复制进去了,连着问好几次得到的代码才能AC,评测不如liuhongrun2022的那个代码优
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


到时候问问他吧
对了,qq通过一下
您的chATgpt是那个网页的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 23:26:13 | 显示全部楼层
sfqxx 发表于 2023-4-15 23:25
到时候问问他吧
对了,qq通过一下
您的chATgpt是那个网页的?

ai.com
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 23:27:54 | 显示全部楼层
sfqxx 发表于 2023-4-15 23:25
到时候问问他吧
对了,qq通过一下
您的chATgpt是那个网页的?

你确定你有加我?我都没有收到请求
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 17:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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