zoukankan      html  css  js  c++  java
  • 22 October in 614

    Contest

    A. defile

    struct 自定义排序。按照题意抽象成模型模拟就可以了。

    自定义排序核心代码:

    struct node {
    	int x, id;
    } d[1000003];
    
    bool cmp1(const node& a, const node& b) {
    	return a.x < b.x;
    }
    bool cmp2(const node& a, const node& b) {
    	return a.id < b.id;
    }
    

    坑点:注意排序函数调用时参数问题。sort 的区间应该是 ([l,r)),左闭右开。所以例如排序 a 到 b 之间的元素,应写作:

    sort(d+a, d+b+1); // 包含 a,不包含 b+1
    

    B. mute

    贪心求最优解。思路类似于 [[雷达安装]]。

    C. queue

    给定正整数 (N),对于 (N) 的所有排列,求使排列中每两个相邻元素的数值差的绝对值的和的最大值。即求最大化 (sumlimits_{i=1}^{N-1}lvert a_i-a_{i+1} vert)

    我们考虑 (N=10) 的情况。为使答案尽可能大,我们应该尽量远离相差较小的两个数字,把相差较大的两个数字放在一起。

    容易得出,数列 (1,10,2,9,3,8,4,7,5,6) 的答案为 (45),不是最优解。

    我们在数列某处放入 (10)。显然,(1)(2) 应该放在 (10) 的两侧,顺序任意。

    而此时不应该立即填入 (3,4),而是填入 (9,8),以保证大小分布的均匀。

    同理,填入 (3,4,7,6,5) 后数列如下:(6,3,8,1,10,2,9,4,7,5),答案为 (49)

    注意其中每两个数字的填入是随意的,左右填入相反不影响答案,但是为了计算方便,这里统一为左边填入较小的数字、右边填入较大的数字。(5) 作为独立的数字,放在最后面(比放在前面答案大)。

    此时可作出差分数组 (2,3,5,7,9,8,7,5,3)

    观察可得,对于偶数 (N) 的排列,和的最大值为 (2+2(3+5+7+cdots+N-3)+(N-2)+(N-1)=2N-1+displaystylefrac{N(N-4)}{2})

    同理,当 (N) 为奇数时,和的最大值为 (2(2+4+6+cdots+N-3)+(N-2)+(N-1)=2N-3+displaystylefrac{(N-1)(N-3)}{2})

    特别地,当 (N=1) 时,最大值为 (0) 而不是 (-1)。(坑点)

    综上。

    注意开 long longprintf 参数的类型问题。


    Post author 作者: Grey
    Copyright Notice 版权说明: Except where otherwise noted, all content of this blog is licensed under a CC BY-NC-SA 4.0 International license. 除非另有说明,本博客上的所有文章均受 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 保护。
  • 相关阅读:
    项目开发环境
    angluarjs2入门学习资源
    mosquitto安装和测试
    loj#6031. 「雅礼集训 2017 Day1」字符串(SAM 广义SAM 数据分治)
    loj#6030. 「雅礼集训 2017 Day1」矩阵(贪心 构造)
    loj#6029. 「雅礼集训 2017 Day1」市场(线段树)
    HDU4609 3-idiots(生成函数)
    loj#6436. 「PKUSC2018」神仙的游戏(生成函数)
    BZOJ3028: 食物(生成函数)
    洛谷P4841 城市规划(生成函数 多项式求逆)
  • 原文地址:https://www.cnblogs.com/greyqz/p/9833944.html
Copyright © 2011-2022 走看看