zoukankan      html  css  js  c++  java
  • Distance Gym

    题目链接:https://cn.vjudge.net/problem/Gym-102028I

    具体思路:首先我们选定左边界和右边界.然后每一次按照左边一个,第二次右边一个的规律往上就可以了

    具体原因:用笔在纸上画画就可以了,每一次放入一个点,他比原来额外再加的,除了上几次的点和这个点之间的距离,还加上的是上一次加点的右边界和左边界,所以为了使加的最大,我们可以让每一次的范围尽可能的大,也就是按照左边和右边的赶着来就可以了.

    #include<iostream>
    #include<cstring>
    #include<iomanip>
    #include<stdio.h>
    #include<cmath>
    using namespace std;
    # define inf 0x3f3f3f3f
    # define ll long long
    const int mod = 1e9 ;
    const int maxn = 100000+100;
    ll a[maxn];
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n;
            ll sum=0;
            scanf("%d",&n);
            for(int i=1; i<n; i++)
            {
                scanf("%lld",&a[i]);
                sum+=a[i];
            }
            ll tt=0,tmp=0;
            int l=1,r=n-1;
            for(int i=1; i<=n; i++)
            {
                if(i&1)
                {
                    tmp+=tt;
                }
                else
                {
                    tt+=sum;
                    sum-=a[l];
                    l++;
                    sum-=a[r];
                    r--;
                    tmp+=tt;
                }
                if(i==1)
                    printf("%lld",tmp);
                else printf(" %lld",tmp);
            }
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    vim常用命令
    转:CRF++总结1
    转:CRF++总结2
    并查集算法程序
    CRF++使用小结(转)
    并查集算法程序
    C#winform 画图
    转:字符识别
    转:A Survey On Relation Extraction
    转:生产计划问题
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262781.html
Copyright © 2011-2022 走看看