Atcoder Beginner 092 – C 解题报告
2018-03-27 21:06
423 查看
1.题意:有一串智障数组,长度为n,代表你将要按该顺序去的几个智障景点的与0的距离,你的起点为0,而且你最终要回到起点0,由于旅游团过于智障,你并不能开心地把这些景点玩个遍,有n个输出,第i行输出就表示你在没法游玩第i个景点的情况下这段旅途所需要的距离花费,问你这n个花费分别是多少。2.思路:记一个sum,表示你把所有景点玩了个遍并回到起点所需的总花费,通过规律不难发现,求总花费代码如下:for(int i =1; i <= n +1; i++) sum += abs(a[i]- a[i -1]);所以接下来这n行输出,你只需要把多游玩的第i个景点的多余花费抹除即可,这个操作并不骚,仔细想下,你会发现,你多的这些花费,其实就是,sum减去,没玩到的第i个景点到第i +1个景点的花费t1 = abs(a[i +1]- a[i]),再减去,第i – 1个景点到第i个没玩到的景点的花费t2 = abs(a[i]- a[i -1]),再加上抹除第i个景点以后,第i - 1个景点到第i + 1个经典的新花费,t3 = abs(a[i +1]- a[i -1])。3.代码:#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>using namespace std;const int Maxx = 1e5;int n;int a[Maxx + 7]; int main() { while(scanf("%d", &n) != EOF) { int sum = 0; for(int i = 1; i <= n; i++) scanf("%d",&a[i]); a[0] = 0; a[n + 1] = 0; for(int i = 1; i <= n + 1; i++) sum += abs(a[i] - a[i -1]); //所有花费 for(int i = 1; i <= n; i++) { int t1 = abs(a[i + 1] - a[i]); //多加的花费,要减掉 int t2 = abs(a[i] - a[i - 1]); //多加的花费,要减掉 int t3 = abs(a[i + 1] - a[i - 1]); //删除后新的花费,要加上 printf("%d\n", sum - t1 - t2 + t3); } }}
相关文章推荐
- 2018.3.28【 AtCoder beginner092-C 】解题报告(线性处理)
- 2018.1.29【 AtCoder Beginner Contest 087-C 】解题报告(简单dp)
- Atcoder Beginner 065 – C 解题报告
- Atcoder Beginner 090-C 解题报告
- 2018.1.29【 AtCoder Beginner Contest 087-D 】解题报告(TLE)(STL,队列)
- [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总
- Atcoder Beginner Contest 092 —— C题
- AtCoder Tenka1 Programmer Beginner Contest 解题报告
- AtCoder Beginner Contest 092 A - Traveling Budget
- 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总
- AtCoder Beginner Contest 092 D - Grid Components
- 《训练指南》DP::beginner解题报告
- [leetcode] 202. Happy Number 解题报告
- 多校训练赛 Furude_Rika and wall 解题报告(dp)
- POJ 1904 King's Quest 解题报告
- LeetCode-Largest Number-解题报告
- 2016GDOI市选拔赛解题报告
- ***1240 Ivan的阿柒工作室 解题报告
- 2017年广东ACM省赛 I题 解题报告
- LeetCode-Fraction to Recurring Decimal-解题报告