zoukankan      html  css  js  c++  java
  • HDU3434数学题

    纯粹的数学题,题目的意思是给你一组序列,让你能同时改变它的一个子序列,让其子序列的值增加1,或者减少1.

    思路的话,就是找其中的数学规律,给你的序列例如是:3,5,1,4,7。先求出其序列的正差和=5-3+7-4=5;所以可以用最小的5步消除其差距。至于为什么嘛?直接用笔思考一下就可以办到了,再者,其不同的结果数是序列的头尾的差值的绝对值加1,这里要注意,并不是序列其中的最大值与最小值的差值。因为好比上面的那个序列。是不可能出现2,2,2,2,2这种情况的,因为要达到这种情况,那么改变的步数一定是超过5步的。因为如果改变之后序列中元素的值小于头尾其中的一个数,那么就不可能通过改变一段子序列的值来变换啦。我的语言表达能力有点差,sorry!

    #include<iostream>
    #include<cstring>
    using namespace
    std;
    int
    seq[1000009];
    int
    main(void)
    {

        int
    count=0,n,m,total,i;
        _int64 first,second,ans;
        cin>>n;
        while
    (n--)
        {

            cin>>m;
            int
    max=0xFFFFFFFF,min=0x7FFFFFFF;
            for
    (i=0;i<m;i++)
                cin>>seq[i];
           
        //    cout<<max<<min<<endl;
            first=0,second=0;
            for
    (i=1;i<m;i++)
            {

                if
    (seq[i]-seq[i-1]>0)
                    first+=seq[i]-seq[i-1];
                else

                    second-=seq[i]-seq[i-1];
            }

            if
    (first>second)
                ans=first;
            else

                ans=second;
       
            if
    (seq[0]>seq[i-1])
            {

                min=seq[i-1];
                max=seq[0];
            }

            else

            {

                max=seq[i-1];
                min=seq[0];
            }

            //cout<<max<<"   "<<min<<endl;
            total=max-min+1;//求出头尾序列的差值并加1,为最终结果的总数
            /*cout<<"Case "<<++count<<": ";
            cout<<ans<<" "<<total<<endl;*/

            printf("Case %d: %I64d %d\n",++count,ans,total);
        }

        return
    0;
    }

  • 相关阅读:
    图解Eclipse中配置Maven并创建Maven的Web工程
    Bzoj1922: [Sdoi2010]大陆争霸
    Bzoj2007: [Noi2010]海拔
    Bzoj5212: [Zjoi2018]历史
    NOIP2017:列队
    NOIP2017:逛公园
    CF908D New Year and Arbitrary Arrangement
    HDU4652:Dice
    HDU4336:Card Collector(min-max容斥)
    [NOI2017]游戏
  • 原文地址:https://www.cnblogs.com/cchun/p/2520091.html
Copyright © 2011-2022 走看看