您的位置:首页 > 其它

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);        }    }}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  At水题