cf 433 C(思维题)
来源:互联网 发布:python 读取文件模块 编辑:程序博客网 时间:2024/05/01 05:30
链接:http://codeforces.com/problemset/problem/433/C
思路:可以先计算总的消耗,接着计算将某一类型的所有数字更换成相邻的数字之后所降低消耗的最大值。。
可以枚举每一个数换成相邻的数字之后减低的消耗,正常枚举肯定会超时。所以需要我们先求出每一个相邻数字的前缀和,接着枚举一个可以用o(1)的时间算出降低的消耗,具体看代码
#include <bits/stdc++.h>using namespace std;#define ll long longvector<ll>v[100005];map<int,int>ma;map<int,int>::iterator it;int a[100005];ll rem[100005];int main(){ int n,m; ll res=0,temp=0; scanf("%d%d",&n,&m); for(int i=0;i<100005;i++) v[i].clear(); ma.clear(); for(int i=1;i<=m;i++) { scanf("%d",a+i); if(i!=1) res+=fabs(a[i]-a[i-1]); //先求出总的消耗 ma[a[i]]++; } for(int i=1;i<=m;i++) //相邻的数字压入邻接表 相同数字就没有必要了 { if(i!=1&&a[i-1]!=a[i])v[a[i]].push_back(a[i-1]); if(i!=m&&a[i+1]!=a[i])v[a[i]].push_back(a[i+1]); } ll r=0; for(it=ma.begin();it!=ma.end();it++) { int i=it->first; int t=v[i].size(); if(t==0)continue; sort(v[i].begin(),v[i].end()); //求前缀和前先排序 rem[0]=v[i][0]; temp=fabs(v[i][0]-i); for(int k=1;k<t;k++) { rem[k]=rem[k-1]+v[i][k]; temp+=fabs(v[i][k]-i); } ll tem=0,ans=0; for(int k=0;k<t;k++) //接着枚举每一个相邻数字 { tem=rem[t-1]-rem[k]-(ll)(v[i][k]*(t-k-1))+(ll)(v[i][k]*(k+1))-rem[k]; if(temp-tem>ans) ans=temp-tem; } r=max(r,ans); } printf("%lld\n",res-r); return 0;}
0 0
- cf 433 C(思维题)
- CF 19C 思维题STL应用
- cf #334 C. Alternative Thinking (思维题)
- CF 551c 二分搜索+思维题
- CF round 355 C题 思维
- cf(思维题)
- CF 527B 思维题
- cf(数学思维题)
- CF#446 Gluttony(思维题)
- CF --- 831C Jury Marks 【思维】
- CF 879 C. Short Program 思维+二进制
- CF 155C. Hometask 思维+模拟.
- Codeforces 702C Cellular Network【二分+思维】CF的题好多二分啊~
- 【CF】【318div2D】【思维题】【DP|数学】
- CF round 355 A题 思维
- CF #890 D 题 【图论 + 思维】
- CF#798 C. Mike and gcd problem(思维)
- CF Round#381(div2)C 思维+构造
- Servlet过滤器(Filter)
- 2016夏季练习——dp
- Xutils实现视频上传显示带进度条
- linux替换字符串
- 转:大型应用下的 AngularJS 性能
- cf 433 C(思维题)
- Codeforces 690C2 Brain Network (medium) (树的直径)
- 一个insert插入语句很慢的优化
- c++库
- 进程平均周转时间的计算
- linux命令追加信任列表
- [Jenkins] Use python requests to programatically get and set Jenkins job configuration
- delphiXE Implicit string cast from 'AnsiString' to 'string'
- 浅谈Java设计模式(十)桥接模式(Bridge)