def find_split_points(s):
total = sum(ord(c) for c in s)
if total % 3 != 0:
return "0,0"
target = total // 3
n = len(s)
sum1 = 0
first = -1
second = -1
# 寻找第一个分割点
for i in range(n):
sum1 += ord(s[i])
if sum1 == target:
first = i
break
if first == -1 or first >= n - 2:
return "0,0"
# 寻找第二个分割点
sum2 = 0
for j in range(first + 1, n):
sum2 += ord(s[j])
if sum2 == target:
second = j
break
if second == -1 or second >= n - 1:
return "0,0"
# 验证第三部分
sum3 = sum(ord(c) for c in s[second + 1:])
if sum3 == target:
return f"{first + 1},{second + 1}"
else:
return "0,0"
# 读取输入
s = input().strip()
# 计算并输出结果
print(find_split_points(s))
代码解释
- 计算总权重:使用sum(ord(c) for c in s)计算字符串所有字符的ASCII值之和。
- 检查总和是否能被3整除:如果不能整除,直接返回"0,0"。
- 寻找第一个分割点:从左到右遍历字符串,累加字符的ASCII值,直到等于总和的1/3,记录位置。
- 寻找第二个分割点:从第一个分割点的下一个位置开始继续遍历,累加字符的ASCII值,直到等于总和的1/3,记录位置。
- 验证第三部分:确保剩余部分的权重也等于总和的1/3,如果满足条件,返回分割点位置(注意题目要求的位置下标是从1开始的,所以需要加1)。