——你以为你以为的。就是你以为的?

——有时候还真是

题目链接:http://codeforces.com/contest/439/problem/D

题意大概就是要求第一个数组的最小值要不小于第二个数组的最大值,你所能做的就是对数组中的某一个数进行+1/-1的操作。最后问操作次数最少须要多少次。

起初这题我看着例子就開始瞎YY了,YY思路如图= =|||

看似有那么一丁点道理,可是事实上是无法这么找到的,非常快就自己找到了反例。。

只是之所以说是有那么一点道理是由于例子中的边缘数正好是它的平衡点,所谓平衡点就是将第一个数组里的数提升到某一个数a之上,把第二个数组的全部数降到数a之下。这就好比将一个天平平衡了。也就是最优解了。

可随之而来的问题也就非常明了了。怎样找到哪个平衡数呢?

我们最好还是先把两个数组里的数存到同一个数组里。然后升序排序。这样我们就得到了一条线性的数列,那么既然是n+m个数里前m个要比后n个小,也就非常自然的能找到平衡点为数列其中的第m或者第m+1个数了。

#include<cstdio>
#include<algorithm>
#define MAX(a,b) ((a>b)?(a):(b))
using namespace std;
int a[1000010],b[1000010],c[2000020];
int main(){
int n,m;
long long ans= 0LL;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++) scanf("%d",&a[i]),c[i]=a[i];
for(int i=0;i<m;i++) scanf("%d",&b[i]),c[n+i]=b[i];
sort(c,c+m+n);
int temp=c[m];
for(int i=0;i<n;i++) ans+=MAX(0,(temp-a[i]));
for(int i=0;i<m;i++) ans+=MAX(0,(b[i]-temp));
printf("%I64d\n",ans);
return 0;
}

最新文章

  1. rxjava源码中的线程知识
  2. mac osx 快捷键符号以及意义 触发角:锁屏
  3. 20151227感知机(perceptron)
  4. JS 版的pnp in_array($str,$arr)
  5. Edit显示行号
  6. MySQL DBA教程:Mysql性能优化之缓存参数优化
  7. Windows phone 之手势识别(Drag)
  8. animate.min.css 动画样式移动端存在的问题
  9. mongodb3.0副本集搭建补充~~非admin数据库的用户权限
  10. 《全栈营销之如何制作个人博客》之一:用什么开发语言和CMS系统
  11. 操作docker容器
  12. 转载:使用Tornado+Redis维护ADSL拨号服务器代理池
  13. VueJS教程
  14. javascript之网页跑马灯
  15. SPHINX 文档写作工具安装简要指南 - windows 版 - 基于python
  16. 卷积神经网络(Convolutional Neural Network, CNN)简析
  17. 大项目小细节---onbeforeunload增强用户体验
  18. jQuery性能优化的一些参考建议
  19. Vue.js学习和第一个实例
  20. Camstar MES 5.8 發現Ajax事件失效

热门文章

  1. Aspose.Cells 导出指定格式项目(金额、数字、文本)
  2. css3 一个简单的静态立方体
  3. Sql server 打不开了,无法识别的配置节 system.serviceModel 解决方案
  4. SQLServerException:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。
  5. ar0331
  6. jni调用 java.lang.UnsatisfiedLinkError: no segmentor_jni in java.library.path
  7. cocos2dx lua 3.10 使用cjson
  8. poj 3204(最小割)
  9. JavaScript------如何解决表单登录信息输入为空显示提示
  10. springboot如何直接读取webapp下页面?