codeforces C. Ryouko's Memory Note

题意:给你m个数,然后你选择一个数替换成别的数,使得.最小。注意选择的那个数在这m个数与它相同的数都必须替换同样的数。

思路:用vector记录每一个数与它相邻的数,如果相同不必记录,然后遍历替换成与它相邻的多个数的中位数之后的所有数的和取最小就可以。。

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <vector>
 5 #include <algorithm>
 6 #include <cmath>
 7 #define maxn 100010
 8 #define ll __int64
 9 using namespace std;
10 const int mod=1000000007;
11 const int inf=1<<30;
12
13 int n,m;
14 ll a[maxn];
15 int sum[maxn];
16 int p[maxn];
17 vector<int>g[maxn];
18
19 int main()
20 {
21     cin>>n>>m;
22     ll sum=0,max1=0;
23     for(int i=1; i<=m; i++)
24     {
25         scanf("%I64d",&a[i]);
26         max1=max(max1,a[i]);
27         if(i==1)continue;
28         if(a[i]!=a[i-1])
29         {
30             g[a[i-1]].push_back(a[i]);
31             g[a[i]].push_back(a[i-1]);
32             sum+=abs(a[i]-a[i-1]);
33         }
34     }
35     ll ans=sum;
36     for(int i=1; i<=max1; i++)
37     {
38         ll tem=sum;
39         if(!g[i].size()) continue;
40         sort(g[i].begin(),g[i].end());
41         int xx=g[i][g[i].size()/2];
42         for(int j=0; j<(int)g[i].size(); j++)
43         {
44            tem+=(abs(xx-g[i][j])-abs(i-g[i][j]));
45         }
46         ans=min(ans,tem);
47     }
48     printf("%I64d\n",ans);
49     return 0;
50 }

codeforces C. Ryouko's Memory Note

时间: 2024-10-10 18:54:42

codeforces C. Ryouko's Memory Note的相关文章

Codeforces 433C. Ryouko&#39;s Memory Note (中位数,瞎搞,思维)

题目链接: http://codeforces.com/problemset/problem/433/C 题意: 给你一堆数字,允许你修改相同的数字成为别的数字,也可以修改成自己,问你修改后相邻数字的距离的绝对值的和最小是多少. 思路: 首先明确一个结论,一个数轴上一些点,要求一个与他们距离之和尽量小的点,那么这个点就是这些点的中位数,即排序后位于中间的数. 这题的思路是把每一个数的与之相邻的保存下来,为了方便,可以用vector数组.然后为了使得距离之和最短,要取中位数.在一串数字中,距所有数

Codeforces Round #248 (Div. 2) C - Ryouko&#39;s Memory Note

题意 一本书有n页.下面要找m个知识点,分别在s[1] s[2]-.s[m]页上. 现在有一个机会,可以把某一页的知识点全部移到另一页上.求最少的翻页次数. 如s[1] s[2] -. s[m]的翻页次数就是|s[1]-s[2]|+|s[2]-s[3]|+-+|s[m-1]-s[m]| 思路 记录每个页码在序列中前后出现的页码(如1 2 3 2 4 则2前后出现过1 3 3 4)(注意如果相邻的页码相同则不用管它) 取它们的中位数,这时一定会有移动这个页码的最优解.把所有页码遍历一遍,取整体最优

Codeforces Round #248 (Div. 1)——Ryouko&#39;s Memory Note

题目连接 题意: 给n和m,一行m个1<=x<=n的数.记c=.现在只能选择一个数x变成y,序列中所有等于x的值都变成y,求最小的c 分析: 对于一个数x,把与他相邻的所有的非x的数全部写下来.如果x增大,那么一部分值增大,一部分减小,且每个数的增大值或减小值都是x的变化值(均相等),也就是说总的结果只和比x大的数与比x小的数的数量有关,所以即中位数. const int maxn = 110000; LL ipt[maxn]; map<LL, vector<LL> >

CodeForces 433C Ryouko&#39;s Memory Note-暴力

Ryouko's Memory Note Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 433C Description Ryouko is an extremely forgetful girl, she could even forget something that has just happened. So in

codeforces248(div1) A. Ryouko&#39;s Memory Note

可以把序列中一个数改变,使得序列中后一个数与前一个数差的绝对值之和最小 把与数x相邻的数加入G[x]的链表中(若这个数值也为x,则不加入)   那么改变了数x,则相当于只会影响到这个链表中的数 为了让x变化后的数  与这个链表中的数差值绝对值之和最小   取排序后的序列的中位数即可 //#pragma comment(linker, "/STACK:102400000,102400000") //HEAD #include <cstdio> #include <cst

Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2) G. The Tree

G. The Tree time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Abendsen assigned a mission to Juliana. In this mission, Juliana has a rooted tree with nn vertices. Vertex number 11 is the roo

Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2) A The Rank

翻译 约翰·史密斯知道他的儿子托马斯·史密斯是全班乃至全校最好的学生.在学校的英语.德语.数学和历史考试结束后得出了一个成绩单. 整个学校一共有 \(n\) 个学生,每名学生都有一个独立的\(id\)(\(id\)的值从\(1\)到\(n\)).输入时学生的四科成绩按照id值从小到大的顺序依次输入.总分最高者为第一名.并且托马斯·史密斯的\(id=1\). 求托马斯·史密斯的排名. 思路 打开打卡. 最常见的做法是开一个结构体,有两个元素,一个是分数一个是编号,然后自定义排序函数,先比较总分,再

Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2) B The Bits

翻译 给出\(2\)个二进制的串,可以交换第一个串的\(2\)个位置,求有多少种交换可以让交换后的第一个串与第二个串异或结果与之前的不同. 思路 怎么是数论题啊. 摘自百度百科:如果\(a\).\(b\)两个值不相同,则异或结果为\(1\).如果\(a\).\(b\)两个值相同,异或结果为\(0\).那么就简单了,不同的情况会有以下几种: \(00\)与\(01\) \(00\)与\(11\) \(10\)与\(01\) 然鹅\(00\)与\(11\)和\(11\)与\(00\)相等所以不会不同

Codeforces Round #250 (Div. 2) (ABCD题解)

比赛链接:http://codeforces.com/contest/433 A. Kitahara Haruki's Gift time limit per test:1 second memory limit per test:256 megabytes Kitahara Haruki has bought n apples for Touma Kazusa and Ogiso Setsuna. Now he wants to divide all the apples between th