C - Sowing Stones(python解)-atcoder
1.B. Alice's Adventures in Permuting (python解)-codeforces2.C. 小红打怪 (python解)-牛客3.B. Replacement (python解)-codeforces
4.C - Sowing Stones(python解)-atcoder
5.C. Alya and Permutation(python解)-codeforces6.AtCoder Beginner Contest 375 C题 (python解)7.C. Penchick and BBQ Buns (python解)-codeforces8.D - Strange Mirroring(python解)——Atcoder9.D. Sharky Surfing (python解)-codeforces10.牛客小白月赛105 (Python题解) A~EC - Sowing Stones** (python解)-atcoder
原题链接:
问题分析:
每个包含石头的单元格 X[i] 中有 A[i] 个石头。
我们需要确保每个单元格从 1 到 N 最终都有 1 个石头。
思路:
- 可用的石头总数必须等于单元格的总数。即需要
N
个石头,但只有ΣA[i]
(其中A[i]
是单元格X[i]
中的石头数量)个石头。如果ΣA[i]
小于N
,则无法满足条件,输出-1
。 - 如果
ΣA[i]
大于N
,则我们有多余的石头,需要正确分配。 - 我们只能将石头从单元格
i
移动到单元格i+1
。因此,如果某个单元格有超过1
个石头,我们可以将多余的石头向右移动,直到耗尽该单元格的石头或填满下一个单元格。 - 我们需要跟踪确保每个单元格从
1
到N
最终都有1
个石头所需的操作(石头移动)次数。
代码:
N,M = map(int, input().split())
X = list(map(int, input().split()))
A = list(map(int, input().split()))
if sum(A) != N:# 检查所有石头的总数是否等于单元格的数量 N
print(-1)
exit()
num, ans = 0, N * (N + 1) // 2# 初始化 ans 为 N*(N+1)//2,表示理想情况下每个单元格都有 1 个石头的总移动成本
for x, a in sorted(zip(X, A), key=lambda x: x[0]):
# 如果当前可用的石头数量小于目标位置 x 前的单元格数量
if num < x - 1:
ans = -1
break
num += a
ans -= x * a
print(ans)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异