大意是有一排石子,每一堆有a[i]个,目标状态每一堆有b[i]个,每一步可以从一堆中取出一个石子转移到相邻的一个,其中1和n也算相邻也即环形。问最少步数。

比赛的时候写了个按照步数贪心的做法,FST了,当时想的贪心是从1到n/2枚举步数,for每一个需要石子的堆i,从(i+d)%n与(i-d)%n中看是否可以转移。

比赛结束自己想到一个反例

1 0 1 0 0

0 1 0 1 0

答案应当是2,但是我那个贪心结果会成3。

后来看了下别人做法,大致有2种,一种是最优解中会存在某些点,这些点不会有穿越他们的MOVE,所以可以枚举每个点作为开始,将环形转为线性。

答案是每个a与b的前缀和之差的和。

还有一种做法是做一个c[i]=a[i]-b[i]的数组,sort之后,取中位数作为target。答案是所有值与中位数之差的和。

下面贴第一种解法的代码

 1 class MoveStones
 2 {
 3 public:
 4     long long get(vector <int> a, vector <int> b)  {
 5         long long s1=0,s2=0;
 6         int n=a.size();
 7         for (int i=0;i<n;i++) {
 8             s1+=a[i];
 9             s2+=b[i];
10         }
11         if (s1!=s2) return -1;
12         long long ret=1LL<<62;
13         for (int i=0;i<n;i++) {
14             long long now=0,s=0;
15             for (int j=0;j<n;j++){
16                 s+=a[j]-b[j];
17                 now+=abs(s);
18             }
19             ret=min(ret,now);
20             rotate(a.begin(),a.begin()+1,a.end());
21             rotate(b.begin(),b.begin()+1,b.end());
22         }
23         return ret;
24     }
25 };

View Code

转载于:https://www.cnblogs.com/micrari/p/5229344.html

TC SRM683 Div1 250相关推荐

  1. [TC]SRM615 div1 250 AmebaDiv1

    题意:给你一个变形虫,初始大小未知,在一定时间顺序内它会遇到n个凝胶,如果这个凝胶大小和他大小一样,他的大小加倍.问你最后变形虫不可能的大小有多少个. 解题思路:只有在n个凝胶大小出现过的值才会变,找 ...

  2. Topcoder SRM 655 DIV1 250 CountryGroupHard

    题意:不同国家的人站在一起,同一个国家的人相邻站,给你一个数组,表示 这个位置属于的国家有几个人,0可以是任何数字,问你能不能确定这个数组(只有一个解) 解题思路:搜索 解题代码: 1 // BEGI ...

  3. 国内C/C++刷题网站汇总

    作者:Luau Lawrence 链接:https://www.zhihu.com/question/25574458/answer/31175374 来源:知乎 - Welcome To PKU J ...

  4. JS学习之路,菜鸟总结的注意事项及错误更正

    JavaScript 是一种面向对象的动态语言,它的语法来源于 Java 和 C,所以这两种语言的许多语法特性同样适 用于 JavaScript.需要注意的一个主要区别是 JavaScript 不支持 ...

  5. 刷题!刷题!刷题网!!!

    0.网易有道OJ : http://oj.youdao.com/ 刷题汇总: https://vjudge.net/ 1.赛码网 :http://www.acmcoder.com/index 2.计蒜 ...

  6. 编译原理课程实践——实现一个初等函数运算语言的解释器或编译器

    编译原理课程实践--实现具有初等函数运算语言的解释器或编译器 作者:Sylvan Ding |转载请注明文章出处! 摘要:本文主要内容是设计词法分析器.语法分析器(LL(1).SLR(1))和语义分析 ...

  7. 整理:ACM相关好的网站 OJ Blog (不断更新)

    ACM-ICPC世界网站 http://acm.timus.ru http://acm.sgu.ru http://acm.hnu.cn http://acm.hdu.edu.cn http://ac ...

  8. DB2 ODBC简介

    http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1008yanqh/?S_TACT=105AGX52&S_C ...

  9. TC SRM 655 Div1 Level 3 题解

    TC SRM 655 Div1 Level 3 题解 题目传送门 dp+几何 首先可以发现凸包是顺时针排列的一些线段构成的.我们可以预处理每一个蓝点是否都在一个线段 r [ i ] → r [ j ] ...

最新文章

  1. 关闭页面不用提示的方法
  2. html复选框多行排列布局
  3. DirectX 9高层着色语言介绍3——语言基础(2)
  4. 曾经成功的敏捷团队为什么失败?
  5. HttpClient在传参和返回结果的中文乱码问题
  6. Spark SQL之RDD转DataFrame
  7. 阿里1682亿背后的协同研发云——云效公共云正式商业化 1
  8. P1-0:项目框架搭建
  9. OpenShift 4 - 用CA证书或Token访问Internal Registry中的容器
  10. Eclipse用法和技巧六:自动生成get和set方法1
  11. 物联网卡11位和13位号码的区别在于哪
  12. BOA软件服务的移植和BOA服务的配置
  13. Atitit .h5文件上传
  14. 小米蓝牙左右互联_399元,真香!小米蓝牙耳机Air,同价位比有线体验还出色?...
  15. Windows下Pidgin介绍/安装配置图文攻略
  16. 学习python的感受
  17. 西班牙出差见闻之二(人情风俗)
  18. cerr和cout的使用
  19. jenkins配置master-slave并发布dubbo服务
  20. [数据结构]第十一章-图论

热门文章

  1. Armadillo的安装
  2. MATLAB中的三维图形等值线
  3. 标签用什么数据结构存比较好_结婚喝什么白酒比较好,婚宴白酒用什么价位的比较好...
  4. Tensorflow2.0数据和部署(四)——Tensorflow高级模型部署
  5. 卷积神经网络的卷积核大小、个数,卷积层数如何确定呢?
  6. php6 配置,thinkphp6下载安装与配置图文详细讲解教程(composer下载安装)
  7. c语言上机填空改错试题,2013年计算机二级C语言上机试题六十二及答案
  8. hdu 3530 Subsequence 单调队列
  9. 项目经理杂谈(上)____________加速步伐!
  10. 螺钉装弹垫平垫机器人_一种批量组装螺钉、弹垫、平垫的工装及使用方法