zoukankan      html  css  js  c++  java
  • UVA 11054 Wine trading in Gergovia(思维)

    题目链接:

    https://vjudge.net/problem/UVA-11054

     1 /*
     2 问题 输入村庄的个数n(2=<n<=100000)和n个村庄的数值,正代表买酒,负代表卖酒,k个单位的酒移动到相邻村需要k个单位的劳动力,
     3 计算并输出至少需要多少个劳动力 
     4 解题思路 模拟,每个需要卖酒的村庄,向两边搜索买酒的地方,谁的多或者直接能够满足就移动谁的,直到所有村庄均满足条件。
     5 最坏的情况下,每个村庄都搜索到最远,n*n,可能超时,另外不可行,因为搜索的时候先后的顺序很难确定,需要一个最优值。所以
     6 不可行。 
     7 分析:考虑最左边的村庄,不论是买酒还是卖酒,需要的劳动力个数相邻移位总是需要a1个,此时a1变为0,向后面走,不论a2买酒
     8 还是卖酒,当前的值为a1+a2,需要的劳动力个数是|a1+a2|,a2变为0,如此a3当前的值为a1+a2+a3,所需要的劳动力个数是|a1+a2+a3|,
     9 a3变为0。依次类推将每个村庄所需的劳动力个数为|a1| + |a1+a2| + |a1+a2+a3| + |a1+a2+...+an|,借助一个中间变量last,
    10     last = a1 i=1,
    11     last = ai+ai-1,i>1;
    12     则答案为|last|依次累加即可。 
    13 */
    14 #include<cstdio>
    15 #include<cmath>
    16 
    17 int main()
    18 {
    19     int n,i;
    20     long long ans,a,last;
    21     while(scanf("%d",&n), n != 0){
    22         
    23         scanf("%lld",&a);
    24         last = a;
    25         ans = abs(last);
    26         
    27         for(i=2;i<=n;i++){
    28             scanf("%lld",&a);    
    29             last += a;
    30             ans += abs(last);
    31         }
    32         printf("%lld
    ",ans);
    33     }
    34     return 0;
    35 }
  • 相关阅读:
    第52节:String,权限修饰符,方法,集合
    String,权限修饰符,方法,集合
    String,权限修饰符,方法,集合
    第51节:Java当中的集合框架Map
    Java当中的集合框架Map
    Java当中的集合框架Map
    Java的当中的泛型
    Java的当中的泛型
    第50节:Java的当中的泛型
    小程序当中的文件类型,组织结构,配置,知识点等
  • 原文地址:https://www.cnblogs.com/wenzhixin/p/8747206.html
Copyright © 2011-2022 走看看