鱼C论坛

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

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

[复制链接]
发表于 2023-4-15 20:58:02 | 显示全部楼层 |阅读模式
10鱼币
链接->https://atcoder.jp/contests/abc298/tasks/abc298_d
我的代码:
  1. mod = 998244353
  2. s = "1"
  3. q = int(input())

  4. for i in range(q):
  5.     query = input().split()
  6.     if query[0] == "1":
  7.         s += query[1]
  8.     elif query[0] == "2":
  9.         s = s[1:]
  10.     else:
  11.         num = int(s) % mod
  12.         print(num)
复制代码

TLE了,有哪位大神帮我优化一下代码,谢谢!
最佳答案
2023-4-15 20:58:03
本帖最后由 liuhongrun2022 于 2023-4-15 21:46 编辑

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

  2. mod = 998244353
  3. arr = deque([1])
  4. num = 1

  5. q = int(input())

  6. for i in range(q):
  7.     op = input().split()
  8.     if op[0] == '1':
  9.         x = int(op[1])
  10.         arr.append(x)
  11.         num = (num * 10 + x) % mod
  12.     elif op[0] == '2':
  13.         x = arr.popleft()
  14.         num = ((num - x * pow(10, len(arr), mod)) % mod + mod) % mod
  15.     else:
  16.         print(num)
复制代码

最佳答案

查看完整内容

注:并非我写 实测 AC
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  2. mod = 998244353
  3. arr = deque([1])
  4. num = 1

  5. q = int(input())

  6. for i in range(q):
  7.     op = input().split()
  8.     if op[0] == '1':
  9.         x = int(op[1])
  10.         arr.append(x)
  11.         num = (num * 10 + x) % mod
  12.     elif op[0] == '2':
  13.         x = arr.popleft()
  14.         num = ((num - x * pow(10, len(arr), mod)) % mod + mod) % mod
  15.     else:
  16.         print(num)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-15 21:00:28 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 21:13:47 | 显示全部楼层
进去链接404了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

稍等
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 21:18:53 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-15 21:30:47 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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


AC,但是问了gpt
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  1. mod = 998244353
  2. s = "1"
  3. length = 1
  4. q = int(input())

  5. for i in range(q):
  6.     query = input().split()
  7.     if query[0] == "1":
  8.         s += query[1]
  9.         length += 1
  10.     elif query[0] == "2":
  11.         s = s[length - 1:]
  12.         length -= 1
  13.     else:
  14.         num = int(s) % mod
  15.         print(num)
复制代码


这个优化可以提高代码的性能,因为在每次删除首位数字时,不再需要对整个字符串进行切片。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

你的代码RE了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

哪个GPT,这么厉害?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

试试这个:

  1. from collections import deque
  2. import array

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

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

  11. for i in range(q):
  12.     query = input().split()
  13.     if query[0] == "1":
  14.         s.append(int(query[1]))
  15.         current_mod = (current_mod * 10 + int(query[1])) % mod
  16.     elif query[0] == "2":
  17.         current_mod = (current_mod - s.popleft() * pow_10_mod[len(s) - 1]) % mod
  18.     else:
  19.         print(current_mod)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-15 22:46:46 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

好吧,难道我的gpt不够厉害,还是我不会问?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我觉得是……
题目的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

你重新问问试试看?
所有题目,信息都复制进去
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我全部复制进去了,连着问好几次得到的代码才能AC,评测不如liuhongrun2022的那个代码优
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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


到时候问问他吧
对了,qq通过一下
您的chATgpt是那个网页的?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

ai.com
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

你确定你有加我?我都没有收到请求
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-28 19:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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