2018美团CodeM编程大赛 Round A Problem 2 下棋 【贪心】

应该一眼看出来是贪心题,然后想最优解是什么。正确的贪心策略是【原棋盘上每个位置的棋子】都往最近的左边【目标棋盘上棋子】移动,如果左边没有棋子了那就闲置最后处理,如果目标棋盘在该位置上也有棋子,那就算距离为0(最近)。最后处理的话,棋盘上的局面应该是所有的棋子都得往右移,这样的话怎么移都无所谓了,朴素的把放过去。

模拟的时候难度在于通过upper bound找到离该位置最近左的位置,所以复杂度是O(NlogN);如果朴素的遍历数组找最近左需要N复杂度,整体n^2就过不了了。

 

 对于upper_bound来说,返回的是被查序列中第一个大于查找值的指针,也就是返回指向被查值>查找值的最小指针,lower_bound则是返回的是被查序列中第一个大于等于查找值的指针,也就是返回指向被查值>=查找值的最小指针。 【引用自 https://blog.csdn.net/u011008379/article/details/50725670 】

 

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<map>
 4 #include<vector>
 5 using namespace std;
 6 
 7 int board[100005];
 8 vector<int> va;
 9 map<int,int> m;
10 long long ans;
11 //贪心策略
12 //每个都向自己最近的左边的棋子移动
13 int main(){
14     int n; cin>>n;
15     for(int i=1;i<=n;i++) cin>>board[i];
16     for(int i=1;i<=n;i++){
17         int x; cin>>x;
18         if(x){//这个位置上有棋子
19             va.push_back(i);
20             m[i]=x;
21         }
22     }
23     
24     for(int i=1;i<=n;i++){
25         while(1){
26             vector<int>::iterator index = upper_bound(va.begin(),va.end(),i);/* index指向第一个大于i的元素 */
27             //如果没有比i还大的,返回begin()
28             if(index==va.begin()) break;//目标盘左边没有棋子了 
29             index--; 
30             if( m[ *index ]>board[i] ) {
31                 ans+=(i-(*index) )*board[i];
32                 m[*index]-=board[i];
33                 board[i]=0;
34                 break;
35             }
36             if( m[ *index ]==board[i] ){
37                 ans+=(i-(*index))*board[i];
38                 va.erase(index);
39                 board[i]=0;
40                 break;
41             }
42             if( m[ *index]<board[i]){
43                 ans+=(i-(*index))*m[ *index];
44                 va.erase(index);
45                 board[i]-=m[*index];
46             }
47         }
48     }
49     
50     for(int i=1;i<=n;i++){
51         if(board[i]==0) continue;
52         while(1){
53             if( m[ va[0] ]>board[i] ) {
54                 ans+=(i+va[0]-2)*board[i];
55                 m[ va[0] ]-=board[i];
56                 break;
57             }
58             if( m[ va[0] ]== board[i] ){
59                 ans+=(i+va[0]-2)*board[i];
60                 va.erase(va.begin());
61                 break;
62             }
63             if( m[ va[0] ]<board[i]){
64                 ans+=(i+va[0]-2)*m[ va[0] ];
65                 va.erase(va.begin());
66                 board[i]-=m[ va[0] ];
67             }
68         }
69     }
70     
71     cout<<ans<<endl;
72     
73     return 0;
74 }

没有提交在美团的oj上,但自己编了几个数据都过了。

转载于:https://www.cnblogs.com/ZhenghangHu/p/9162910.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea清理svn信息_IntelliJ IDEA SVN的账号修改 信息清除

来到编译器的setting设置 搜索subversion 点击subversion 找到下面的clear auth...按钮,点击一下 就可以了…如果我们不小心输入svn账号错误的话,后面就一直提示认证失败,不能checkout代码. 这个是因为svn把你输入的账号进行了缓存. 如果我们想重新输入新的账号,必须要清除缓存…

同步手绘板——json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;但是也使用了类似于C语言家族的习惯&#xff08;包括C、C、C#、Java、JavaScript、Perl、Python等&#xff09;。这些特性使JSON成为…

[HNOI2008]玩具装箱TOY

洛谷题目连接:[HNOI2008]玩具装箱TOY 题目描述 P教授要去看奥运&#xff0c;但是他舍不下他的玩具&#xff0c;于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压缩&#xff0c;其可以将任意物品变成一堆&#xff0c;再放到一种特殊的一维容器中。P教授有编号为1...N的…

C语言-结构体内存对齐

C语言结构体对齐也是老生常谈的话题了。基本上是面试题的必考题。内容虽然很基础&#xff0c;但一不小心就会弄错。写出一个struct&#xff0c;然后sizeof&#xff0c;你会不会经常对结果感到奇怪&#xff1f;sizeof的结果往往都比你声明的变量总长度要大&#xff0c;这是怎么回…

nginx 二进制包安装mysql_二进制安装mysql5.7

下载地址&#xff1a;https://downloads.mysql.com/archives/community/[rootlocalhost soft]# lsmysql-5.7.17-linux-glibc2.5-x86_64.tar.gz nginx-1.12.2 nginx-1.12.2.tar.gz[rootlocalhost soft]#1.详细描安装的过程1.1关闭防火墙systemctl stop firewalld.service #停止f…

.NET 类型(Types)的那些事

引言 您是.Net工程师&#xff1f;那 .NetFramework中的类型您知道有三大类吗&#xff1f;&#xff08;除了引用类型和值类型&#xff0c;还有&#xff1f;&#xff09; 引用类型一定在“堆”上&#xff0c;值类型一定在“栈”上&#xff1f; 那引用类型在内存中的布局细节您又知…

几种去除数组中重复元素的方法、数组去重

工作中遇到的一个问题&#xff0c;就是去除数组中重复的元素&#xff0c;记录一下几种有效的方法&#xff1a; 第一种思路&#xff1a;遍历要删除的数组arr, 把元素分别放入另一个数组tmp中&#xff0c;在判断该元素在arr中不存在才允许放入tmp中。 <!DOCTYPE html> <…

MongoDB学习使用

一、什么是MongoDB&#xff1f; MongoDB是一个高性能&#xff0c;开源&#xff0c;无模式的文档型数据库&#xff0c;是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式&#xff0c; NoSql&#xff0c;全称是 Not Only Sql,指的是…

域账号更改密码之后代理需要重新配置

在使用域账号的时候&#xff0c;如果需要配置账户和密码&#xff0c;那么最好记录下来&#xff0c;否则将来找不到就很尴尬了。 我遇到的问题是&#xff0c;因为在另外一台电脑配置了域账号&#xff0c;用来联网&#xff0c;提供网络给visual studio 1.Firefox 这个代理的账号…

wcf精通1-15

随笔- 197 文章- 0 评论- 3407 十五天精通WCF——第一天 三种Binding让你KO80%的业务 转眼wcf技术已经出现很多年了&#xff0c;也在.net界混的风生水起&#xff0c;同时.net也是一个高度封装的框架&#xff0c;作为在wcf食物链最顶端的我们所能做的任务已经简单的不能再简单…

python如何实现共享报表系统_使用python来实现报表自动化-阿里云开发者社区

xlwt 常用功能xlrd 常用功能xlutils 常用功能xlwt写Excel时公式的应用xlwt写入特定目录(路径设置)xlwt Python语言中&#xff0c;写入Excel文件的扩展工具。可以实现指定表单、指定单元格的写入。支持excel03版到excel2013版。使用时请确保已经安装python环境。百度百科xlrd Py…

去除inline-block元素间间距的N种方法

这篇文章发布于 2012年04月24日&#xff0c;星期二&#xff0c;22:38&#xff0c;归类于 css相关。 阅读 147771 次, 今日 52 次 by zhangxinxu from http://www.zhangxinxu.com 本文地址&#xff1a;http://www.zhangxinxu.com/wordpress/?p2357 一、现象描述 真正意义上的in…

Docker深入浅出2

Docker系统架构 Docker使用客户端-服务端&#xff08;c/s&#xff09;架构模式&#xff0c;使用远程api来管理和创建Docker容器。 docker容器通过Docker镜像来创建。 容器与镜像的关系类似于面向对象编程中的对象与类的关系 Docker面向对象容器对象镜像类加速器配置&#xff1a…

mysql安装包下载密码_MySQL解压包的安装与下载的图文教程

这篇文章主要为大家详细介绍了mysql解压包的安装基础教程&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下由于换了新电脑&#xff0c;所以的环境都要到新电脑去配置。突然发现mysql的配置忘了&#xff0c;然后百度又重新来一遍。特地写一篇文章记录一…

php 扒取网页数据

扒取方法 public function index(){$url http://www.dytt8.net/;// $url Public/txt/movies.txt;$content file_get_contents($url);$content iconv("gb2312", "utf-8//IGNORE",$content);$reg "|<div class\"co_content2\">(.*…

多维DP UVA 11552 Fewest Flop

题目传送门 1 /*2 题意&#xff1a;将子符串分成k组&#xff0c;每组的字符顺序任意&#xff0c;问改变后的字符串最少有多少块3 三维DP&#xff1a;可以知道&#xff0c;每一组的最少块是确定的&#xff0c;问题就在于组与组之间可能会合并块&#xff0c;总块数会-1。…

多表联合查询

关联数据库字典表的多表联合查询 inner join…on 自动连接 需要用到表的所有信息时&#xff0c;可以用以下两种方法 1) left join…on… 左连接 &#xff08;以左为准&#xff0c;右边没有NULL代替&#xff09; 2) right join…on… 右连接&#xff08;以右为准&#xff…

python elasticsearch update_使用python的elasticsearch部分更新

我有以下格式的elasticsearch文档。我需要部分更新“x”字段并在其中添加python dict。{"_index": "gdata34","_type": "gdat","_id": "328091-72341-118","_version": 1,"_score": 1,"…

32位与64位注册表

如果32位系统OFP的注册表路径是 HKEY_LOCAL_MACHINE\SOFTWARE\Bohemia Interactive\ 那么在64系统里就应该是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Bohemia Interactive\ 多了一级Wow6432Node转载于:https://www.cnblogs.com/zhang-pengcheng/p/4712135.html

http 请求头和响应头

客户端发送请求过程带着的数据&#xff1a; 1.请求地址 2.请求方式 3.请求头 request headers 4.请求参数 https://www.juhe.cn/ 130.... 1a2b....pei 服务端响应给客户端的信息&#xff1a; 1.响应内容 2.响应报文/响应头部 response headers a 响应头 b 响应体 3.http状…