3 条题解
-
2
V, q = map(int, input().split()) # s 用来存储 V 转换为三进制后的每一位,列表中的索引对应三进制的位数 s = [] # n 用以记录 V 的三进制位数 n = 0 # 将 V 转换为三进制数表示,并存储在列表 s 中 while V > 0: s.append(V % 3) V = V // 3 n += 1 # 扩充列表 s 到足够的长度,以确保即便后续有高位的操作也能正确执行 for i in range(1000): s.append(0) # 处理 q 次操作 for j in range(q): op, i = map(int, input().split()) # 更新 n,保证 n 始终为操作的最大位数 n = max(n, i) # 操作一:s[i] 的值按照 0→1→2→0 循环变化 if op == 1: s[i] = (s[i] + 1) % 3 # 操作二:s[i] 的值按照 0→2→1→0 循环变化 if op == 2: s[i] = (s[i] + 2) % 3 # 操作三:s[i] 的值在 1 和 2 之间变化,0保持不变 if op == 3: if s[i] == 1: s[i] = 2 elif s[i] == 2: s[i] = 1 # 操作完后,计算从三进制数转换回十进制后的结果 res = 0 k = 1 for i in range(n + 1): res += k * s[i] k = k * 3 # 输出每次操作后的三进制数对应的十进制数 print(res)
-
1
来发数学,无列表。
vp,q = map(int,input().split()) for i in range(q): op, j = map(int, input().split()) v = vp//(3**j) # 在j之前的位数所代表的值,删去后面所有的数 vo = vp%(3**j) # 在j之后的位数所代表的值 if op==3 : if (v%3==1): # j位是1 v = v+1 elif (v%3==2): # j位是2 v = v-1 else : # 瞪眼法可知,一二情况即为j位往上数两位。 v = (v%3+op)%3+v//3*3 vp = v*(3**j)+vo # 计算最后的数 print(vp)
-
-1
Python
ternary: list[int] = [0] * 105 V: int q: int V, q = map(int, input().split()) n: int = 0 while V: ternary[n] = V % 3 n += 1 V //= 3 for _ in range(q): op, idx = map(int, input().split()) n = max(n, idx) match op: case 1: ternary[idx] = (ternary[idx] + 1) % 3 case 2: ternary[idx] = (ternary[idx] + 2) % 3 case 3: ternary[idx] = (3 - ternary[idx]) % 3 ans: int = 0 for i in range(n, -1, -1): ans = ans * 3 + ternary[i] print(ans)
- 1
信息
- ID
- 933
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 8
- 标签
- 递交数
- 671
- 已通过
- 100
- 上传者