对于这题本人刚开始的时候的想法是:先把最大两数差的位置找到然后merge计算一个值再与一连串相同的数做merge后计算一个值比较取最大值输出;可提交后发现不对,于是本人就搜了一下正解发现原来这题的正确解题思路是:采用数学中的中位数原理,分别把某数两边相邻且不同的数存入向量容器Vector中然后排序,找到中位数计算一遍,找到计算的最大值,然后把按照输入顺序的值计算出一个总和,然后相减就是其解。

关于中位数原理本人稍微提一下:

求中位数,首先要先进行数据的排序(从小到大),然后计算中位数的序号,分数据为奇数偶数两种来求。排序时,相同的数字不能省略) [2]  

  中位数算出来可避免极端数据,代表着数据总体的中等情况。   

  如果总数个数是奇数的话,按从小到大的顺序,取中间的那个数。   

  如果总数个数是偶数的话,按从小到大的顺序,取中间那两个数的平均数

其中中位数的应用就是求与其它元素距离最小之和;本体还涉及到分治思想;好了废话也不说多了就贴一下我的代码吧;

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define LL __int64
using namespace std;
const int N = +;
int A[N];
int n,m;
int vis[N];
vector<int> v[N];
int abs(int x)
{
if (x<) return -x;
else return x;
}
int main()
{
while (scanf("%d%d",&n,&m)!=EOF)
{
LL ans=;
memset(vis,,sizeof vis);
for (int i=;i<=m;i++){
scanf("%d",&A[i]);
if (i>){
if (A[i]!=A[i-]){
v[A[i]].push_back(A[i-]);
v[A[i-]].push_back(A[i]);
}
ans+=(LL)abs(A[i]-A[i-]);
}
}
LL maxn=;
if (m>)
for (int i=;i<=m;i++){
if (vis[A[i]]) continue;
vis[A[i]]=;
sort(v[A[i]].begin(),v[A[i]].end());
int r=v[A[i]].size();
if (r==) continue;
r/=;
int mid=v[A[i]][r];
LL t1=;
LL t2=;
for (int j=;j<v[A[i]].size();j++){
t1+=(LL)abs(mid-v[A[i]][j]);
}
for (int j=;j<v[A[i]].size();j++){
t2+=(LL)abs(A[i]-v[A[i]][j]);
}
maxn = max(maxn,t2-t1);
}
ans -= axn;
printf("%I64d\n",ans);
}
return ;
}

Problem - 433C - Codeforces解题报告的更多相关文章

  1. ZOJ Problem Set - 1025解题报告

    ZOJ Problem Set - 1025 题目分类:基础题 原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=10 ...

  2. ACM: A Simple Problem with Integers 解题报告-线段树

    A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%lld & %l ...

  3. BestCoder18 1002.Math Problem(hdu 5105) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5105 题目意思:给出一个6个实数:a, b, c, d, l, r.通过在[l, r]中取数 x,使得 ...

  4. Problem A: 选举 解题报告

    Problem A: 选举 题意 给出一个投票过程.有\(n\)个选民和\(m\)个候选人,每个选民\(i\)有个不重且有序的可投集合\(\{a_i\}\). 对于第一轮投票,选民\(i\)会投给\( ...

  5. Problem A: 种树 解题报告

    Problem A: 种树 Description 很久很久以前,一个蒟蒻种了一棵会提问的树,树有\(n\)个节点,每个节点有一个权值,现在树给出\(m\)组询问,每次询问两个值:树上一组点对\((x ...

  6. Problem C: 多线程 解题报告

    Problem C: 多线程 Description 多线程是一种常见的加速手段,利用多个线程同时处理不同的任务可以一定程度上减少总耗时,达到提高效率的目的.然而,多个线程间的执行顺序是完全不可控的, ...

  7. Problem A: 踢罐子 解题报告

    Problem A: 踢罐子 Description 平面上有\(n\)个点,其中任意2点不重合,任意3点不共线. 我们等概率地选取一个点A,再在剩下的\(n-1\)个点中等概率地选取一个点B,再在剩 ...

  8. Problem B: 专家系统 解题报告

    Problem B: 专家系统 Description 一个专家系统是指,你雇佣了\(n\)个专家,他们每个人会做出一个结果,然后你从中选取较多的专家的结果组合而成最终的结果.专家系统广泛应用于传统机 ...

  9. Problem C Dist 解题报告

    Problem C Dist Description 有一个\(n\)个点带边权的连通无向图,边集用\(k\)个集合\(s_1,s_2,\dots,s_k\)和\(k\)个整数\(w_1,w_2,\d ...

随机推荐

  1. (转载)Delphi TStringList的用法

    Delphi TStringList的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. TStringList 常用方法与属性: var List: TStringL ...

  2. 《编写高质量代码:改善Python程序的91个建议》读后感

    编写高质量代码:改善Python程序的91个建议  http://book.douban.com/subject/25910544/ 1.(建议16)is 用于判断两个对象的id是否相等,==才是判断 ...

  3. 2014年度辛星html教程夏季版第五节

    如果读者是一位后台开发者,那么肯定会知道什么叫表单,这里我们就介绍一下前台如何使用表单,表单的使用也是我们编写网页的必须经历的一关,而且,表单也往往是我们网站的漏洞和弱点出现的地方. ******** ...

  4. Hibernate各种主键生成策略2

    先来看看主键映射的标签: <id   (1)name="propertyName"   (2)column="column_name" (3)type=& ...

  5. 异步委托 多线程实现摇奖器 winform版

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  6. 把Mvc4项目部署到虚拟目录之后找不到control想到的文件路径规范的问题

    最近部署的项目的时候由于端口不够用,想到了把Mvc项目部署到虚拟目录中,结果发现图片,js设置control都找不到了.项目是mvc4+easyui开发的,大量的代码都是在js中调用control,写 ...

  7. 开发设计模式(四) 代理模式(Proxy Pattern)

    转自http://blog.sina.com.cn/s/blog_89d90b7c0101803g.html 代理模式:代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问.在某些情况下, ...

  8. 《有限元分析基础教程》(曾攀)笔记一-二维杆单元有限元程序(基于Python)

    曾攀老师的<有限元分析基础教程>第三章有二维杆单元的推导,并结合一个例题进行了解析解和基于Matlab的程序求解.但是我感觉书中的MATLAB代码有点罗嗦,而且一些实现方法也比较麻烦,比如 ...

  9. Android USB Host 与 HID 之通讯方法

    Android USB Host与HID通讯,就目前Google Developer提供的方法有bulkTransfer()与controlTransfer(),看是简简单单的两个方法,要实现真正的通 ...

  10. jquery data方法

    jquery.data()文档:http://api.jquery.com/jQuery.data/ html5有个data-*属性,跟这个功能一样. Note: This is a low-leve ...