TC SRM683 Div1 250
大意是有一排石子,每一堆有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相关推荐
- [TC]SRM615 div1 250 AmebaDiv1
题意:给你一个变形虫,初始大小未知,在一定时间顺序内它会遇到n个凝胶,如果这个凝胶大小和他大小一样,他的大小加倍.问你最后变形虫不可能的大小有多少个. 解题思路:只有在n个凝胶大小出现过的值才会变,找 ...
- Topcoder SRM 655 DIV1 250 CountryGroupHard
题意:不同国家的人站在一起,同一个国家的人相邻站,给你一个数组,表示 这个位置属于的国家有几个人,0可以是任何数字,问你能不能确定这个数组(只有一个解) 解题思路:搜索 解题代码: 1 // BEGI ...
- 国内C/C++刷题网站汇总
作者:Luau Lawrence 链接:https://www.zhihu.com/question/25574458/answer/31175374 来源:知乎 - Welcome To PKU J ...
- JS学习之路,菜鸟总结的注意事项及错误更正
JavaScript 是一种面向对象的动态语言,它的语法来源于 Java 和 C,所以这两种语言的许多语法特性同样适 用于 JavaScript.需要注意的一个主要区别是 JavaScript 不支持 ...
- 刷题!刷题!刷题网!!!
0.网易有道OJ : http://oj.youdao.com/ 刷题汇总: https://vjudge.net/ 1.赛码网 :http://www.acmcoder.com/index 2.计蒜 ...
- 编译原理课程实践——实现一个初等函数运算语言的解释器或编译器
编译原理课程实践--实现具有初等函数运算语言的解释器或编译器 作者:Sylvan Ding |转载请注明文章出处! 摘要:本文主要内容是设计词法分析器.语法分析器(LL(1).SLR(1))和语义分析 ...
- 整理:ACM相关好的网站 OJ Blog (不断更新)
ACM-ICPC世界网站 http://acm.timus.ru http://acm.sgu.ru http://acm.hnu.cn http://acm.hdu.edu.cn http://ac ...
- DB2 ODBC简介
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1008yanqh/?S_TACT=105AGX52&S_C ...
- TC SRM 655 Div1 Level 3 题解
TC SRM 655 Div1 Level 3 题解 题目传送门 dp+几何 首先可以发现凸包是顺时针排列的一些线段构成的.我们可以预处理每一个蓝点是否都在一个线段 r [ i ] → r [ j ] ...
最新文章
- 关闭页面不用提示的方法
- html复选框多行排列布局
- DirectX 9高层着色语言介绍3——语言基础(2)
- 曾经成功的敏捷团队为什么失败?
- HttpClient在传参和返回结果的中文乱码问题
- Spark SQL之RDD转DataFrame
- 阿里1682亿背后的协同研发云——云效公共云正式商业化 1
- P1-0:项目框架搭建
- OpenShift 4 - 用CA证书或Token访问Internal Registry中的容器
- Eclipse用法和技巧六:自动生成get和set方法1
- 物联网卡11位和13位号码的区别在于哪
- BOA软件服务的移植和BOA服务的配置
- Atitit .h5文件上传
- 小米蓝牙左右互联_399元,真香!小米蓝牙耳机Air,同价位比有线体验还出色?...
- Windows下Pidgin介绍/安装配置图文攻略
- 学习python的感受
- 西班牙出差见闻之二(人情风俗)
- cerr和cout的使用
- jenkins配置master-slave并发布dubbo服务
- [数据结构]第十一章-图论
热门文章
- Armadillo的安装
- MATLAB中的三维图形等值线
- 标签用什么数据结构存比较好_结婚喝什么白酒比较好,婚宴白酒用什么价位的比较好...
- Tensorflow2.0数据和部署(四)——Tensorflow高级模型部署
- 卷积神经网络的卷积核大小、个数,卷积层数如何确定呢?
- php6 配置,thinkphp6下载安装与配置图文详细讲解教程(composer下载安装)
- c语言上机填空改错试题,2013年计算机二级C语言上机试题六十二及答案
- hdu 3530 Subsequence 单调队列
- 项目经理杂谈(上)____________加速步伐!
- 螺钉装弹垫平垫机器人_一种批量组装螺钉、弹垫、平垫的工装及使用方法