zoukankan      html  css  js  c++  java
  • 一月24日新生冬季练习赛解题报告C.极差

    C.极差
    Time Limit: 1000 MS Memory Limit: 32768 K
    Total Submit: 22 (18 users) Total Accepted: 18 (18 users) Special Judge: No
    Description
    小辉是个顽皮的胖孩纸,总爱在老师的黑板上乱涂乱画,又一次他在老师的黑板上写了有n个正数组成的数列,这时小彪看见了,就说:“小胖子,就用黑板上的这些数,我考你一道题,你每次选中这些数的其中两个数a和b,然后将它们擦掉,再在黑板上写上a*b+1,直到剩下最后一个数。。。如果你能得到最小的数min和最大的数max,并求出max-min,我就给你买煎饼果子吃。” 听到了好吃的,小辉两眼放光,可是这种费脑细胞的问题小辉不会,请你来帮帮他。。。
    Input
    有多组测试数据,每组数据第一行是数列长度n(2<=n<=20),第二行是小辉所写的数列,最大值保证不超过int,输入处理到文件结束。
    Output
    输出max-min的值并换行。
    Sample Input
    2
    1 2
    6
    4 3 5 1 7 9
     
    Sample Output
    0
    1688
     
    Hint
        

    水体一枚  

    直接上代码:

    额  代码删了

    我说点值得注意的地方吧

    每次变换数字之后都要排序才可以

    同样是杭电的思路:

    贪心
    做两次贪心,分别得到最大值和最小值
    对所有提供的数排序,然后合并两个最大的,在剩下的数(包括合并后得到的数)中继续取两个最大的合并,这样能得到最小值
    对所有提供的数排序,然后合并两个最小的,在剩下的数(包括合并后得到的数)中继续取两个最小的合并,这样能得到最大值
    然后最大值和最小值做差就得到结果了

    代码如下:

    # include <stdio.h>

    # include <iostream>

    # include <algorithm>

    using namespace std;

    int main ()

    {

        int a[22],b[22];

        int n,i;

        while(scanf("%d",&n)!=EOF)

        {

            for(i=0; i<n; i++)

            {

                scanf("%d",&a[i]);

                b[i]=a[i];

            }

            for(i=0; i<n-1; i++)  //max

            {

                sort(a+i,a+n);

                a[i+1]=a[i]*a[i+1]+1;

            }

            for(i=n-1; i>0; i--)  //min

            {

                sort(b,b+i+1);

                b[i-1]=b[i]*b[i-1]+1;

            }

            printf("%d ",a[n-1]-b[0]);

        }

     

    }

     

  • 相关阅读:
    DAY10-MYSQL表操作
    DAY10-MYSQL完整性约束
    DAY10-MYSQL数据类型
    DAY10-MYSQL存储引擎
    DAY10-MYSQL库操作
    017.2 基本数据类型对象包装类
    017.1 stringBuffer
    016.2 String
    16.1 eclipse设置
    015.5线程常见用法(面试题)
  • 原文地址:https://www.cnblogs.com/zhanzhao/p/3532950.html
Copyright © 2011-2022 走看看