当前位置: 首页 > news >正文

wordpress音乐播放界面/百度seo关键词排名技术

wordpress音乐播放界面,百度seo关键词排名技术,找培训学校去哪个网站,境外的黄色网站【问题描述】 给定一个长度为m的序列a,下标编号为1~m。序列的每个元素都是1~n的 整数。定义序列的代价为 你现在可以选择两个数x和y,并将序列a中所有的x改成y。x可以与y相等。请求出序列最小可能的代价。 【输入格式】  输入第一行包含两个整数n和m。第…

      【问题描述】

给定一个长度为m的序列a,下标编号为1~m。序列的每个元素都是1~n的

整数。定义序列的代价为

  你现在可以选择两个数x和y,并将序列a中所有的x改成y。x可以与y相等。请求出序列最小可能的代价。

【输入格式】
  输入第一行包含两个整数n和m。第二行包含m个空格分隔的整数,代表序
列a。
【输出格式】
  输出一行,包含一个整数,代表序列最小的代价。
【样例输入 1】
  4 6
  1 2 3 4 3 2
【样例输出 1】
  3
【样例输入 2】
  10 5
  9 4 3 8 8
【样例输出 1】
  6
【样例解释】
样例 1 中,最优策略为将 4 改成 3。样例 2 中,最优策略为将 9 改成 4。
【数据规模和约定】

  对于30%的数据 n, m <=100
  60%的数据,n,m≤ 2000。
  对于100%的数据,1 ≤ n,m ≤ 100,000。

 

思路:读入数列, 将相邻的数建一条边。

可以用vector动态二维数组来存一个类似于 邻接链表的东西 (只是类似)。

第一维是 第 i 个数,二维是 第 i 个数相连的数。 注意当i=0 和 i=m 时的情况。

预处理完后 。接下来是操作, 把第 i 个数连接的所有数找出中位数,改变中位数即可达到目的。

因为找中位数需要将 i 连接的整个序列遍历一边。十分麻烦。

所以就可以将 第 i 个数所连接数的数列排一遍序 。中间的数即为 中位数 。

用before 存 原来  第 i 个数所连接数的数列 的价值  

after 存 改变后第 i 个数所连接数的数列 的价值,

做before 与 after 的 差即为 要改变的价值 ,把这个价值与上一个价值 取较大值,最终即为要改变的值,

最后 用Sum 存起 所有before 的 和,即为 该序列需求的值。

但是!! 由于 前后两个数加了两遍   

如图,所有的数都被加了两遍 所以答案要 除 2  最后减去 上面求出的要改变的值  即为答案

 

 

 

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>d
#include <algorithm>
#include <vector>
#define Max 1000001
using namespace std;
int N, M;
int number [Max];
vector < int > test [Max];
long long Answer, Sum;
int max (int a, int b)
{return a > b ? a : b;
}
int abs (int a)
{return a < 0 ? -a : a;
}
int main()
{ios :: sync_with_stdio (false);cin >> N >> M;for (int i = 1; i <= M; i++)cin >> number [i];for (int i = 1; i <= M; i++){if (i > 1 && number [i - 1] != number [i])   // 防止i等于0 因为下标为0的元素不属于序列  test [number [i - 1]].push_back (number [i]);       //建立 类似 于邻接矩阵的东西  ( test [i] 表示 数 i 连接的数有什么)if (i < M && number [i + 1] != number [i])               //防止 超出最大长度 test [number [i + 1]].push_back (number [i]);        //同上 
    }for (int i = 1; i <= N; i++)    {if (test [i].size() == 0)           //如果第 i 个点没有连接其他点 ,即 没有出现过这个数 ,就跳过 continue;sort (test [i].begin (), test [i].end ());   //把这个数连接 的数 排一遍序 中间的数即为中位数 int y = test [i][test [i].size () >> 1];   //找出中位数 long long before = 0;                     long long after = 0;                       for (int j = 0; j < test [i].size (); j++)  {before += abs (i - test [i][j]);         //  改变之前之前的价值总和   after += abs (y - test [i][j]);          //  改变之后的 价值总和 
        }Answer = max (Answer, before - after);   //before - after 是 整个序列改变的值 ,因为要是序列总和尽量小,所以改变的值要尽量大 Sum += before;      // Sum 为之前 的 到 第 i 个数的总和 
    }cout << Sum / 2 - Answer << endl;   //因为每个数都加了2遍,所以要除2 后再减去最大的改变值 return 0;
}

 

转载于:https://www.cnblogs.com/ZlycerQan/p/6059712.html

http://www.jmfq.cn/news/4883203.html

相关文章:

  • 创建网站并制作首页教案/上海百度公司地址在哪里
  • Django可以做门户网站吗/app开发
  • 舆情分析案例/百度seo优化
  • 免费网站建设视频教程/360seo排名优化服务
  • 银川网站建设价格/网络营销策划包括哪些内容
  • 电子商务网站建设组织流程图/产品网络推广深圳
  • 网站建设应重视后期的服务和维护/seo短视频网页入口引流网站
  • 网站上怎么做动画广告视频/关键词优化公司
  • 越南做企业网站/什么软件可以免费发广告
  • 中国电信网站备案管理系统/百度霸屏培训
  • 南通城乡建设局网站/seo优化是啥
  • 张家界seo优化/如何对seo进行优化
  • 怎么做网站作业/谷歌推广怎么样
  • 东莞公司网站建设/推广文案范例
  • 网站怎么做域名/全搜网
  • 做网站的视频教学/下拉词排名
  • 哈尔滨网站开发建设公司/网站开发平台有哪些
  • 一个好的网站应该具有什么/如何建网站赚钱
  • 嘉兴网站建设企业/南宁seo优化公司排名
  • 做网站的职业/搜索引擎下载入口
  • 微信 网站 优劣势/百度信息流投放
  • 宝安大型商城网站建设/深圳seo优化seo优化
  • 深圳市浩天建设网站/线上推广是做什么的
  • 做带后台的网站/建站之星官方网站
  • 科技开发公司/宁波seo整体优化
  • 网站制作工作室/东莞网站优化公司哪家好
  • 网站推广的定义及方法/seo优化内页排名
  • 西昌手机网站制作/网络推广是网络营销的基础
  • 好的学校网站设计/搜索网站大全排名
  • 如何做电商网站/创意营销案例