1 条题解
-
0
自动搬运
来自洛谷,原作者为

刘辰雨
如果你不想称呼我的全名,你可以以我名称的任意非空后缀来称呼我。搬运于
2025-08-24 22:35:00,当前版本为作者最后更新于2021-12-26 14:46:52,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
P7994
在阅读本题解之前,请先思考 铺设道路。 之后,本题会更加明了。
分析 :
此题与 铺设道路 非常相似,唯一的不同在于分为升温,降温两种方式。可以证得,分开加减一定比统一升降,再单独操作步骤来的少,所以此题分成两个两个数组存放,与标准量相减,取绝对值处理。(不是我笼统,真的和铺设道路一模一样)。
其余看代码吧,还有一些处理思想,也在代码里。
Code :
1,普通 铺设道路 :
#include<iostream> using namespace std; long long n , a[100001] , ans; int main() { cin>>n; for( int i = 1 ; i <= n ; i ++ ) cin>>a[i]; for( int i = 1 ; i <= n ; i ++ ) if( a[i] > a[i-1])ans += a[i] - a[i-1]; cout<<ans; return 0; }2,此题:
#include<bits/stdc++.h> using namespace std; long long n; long long a[100001] , b[100001]; long long now[100001] , want[100001]; long long ans = 0; int main() { cin>>n; for(int i = 1 ; i<= n ; i++) cin>>want[i]; for(int i = 1 ; i<= n ; i++) { cin>>now[i]; long long x = want[i] - now[i]; if(x >= 0)a[i] = x; else b[i] = -x; } for(int i = 1 ; i<= n ; i++) { if(a[i] > a[i-1])ans += a[i] - a[i-1]; } for(int i = 1 ; i<= n ; i++) { if(b[i] > b[i-1])ans += b[i] - b[i-1]; } cout<<ans; return 0; }ps:可以做一些对比。
- 1
信息
- ID
- 7368
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者