当前位置: 首页 > 编程日记 > 正文

LA3177 - Beijing Guards(二分+贪心【更优美的解法)

简介:同皇帝的烦恼

分析:

  • 如果n是偶数,那么答案就是相邻两个人的r值之和的最大值
    ans=max{r(i)+r(i+1)} (i=1,2,3,…,n),规定r(n+1)=r1
    这时的ans实际上是答案的下限
    一个合法的方案就是,对于编号为i的人来说,如果i是奇数,那么就从1往后依次取礼物,
    如果i是偶数,那么就从ans往前依次取礼物

  • 如果n是奇数,这个时候就需要二分一个ans了
    L=max{r(i)+r(i+1)}
    R=max{3*r(i)} =>(最坏情况下相邻的三个人全都需要不一样的礼物)
    假设我们已经有了p个礼物,我们要怎么分配呢:
    假设第一个人取走了1~r1的礼物,
    那么编号为偶数的人就尽量往前取,编号为奇数的人就尽量往后取,同时保证相邻的人不冲突
    这样就可以使1号和n号的冲突尽可能小

比如,n=5,A={2,2,5,2,5},p=8
1:{1,2}
2:{3,4}
3:{8,7,6,5,2} (3,4已经被2取走了)
4:{1,3}
5:{8,7,6,5,4}
1号和5号不冲突,所以p=8为可行解

在代码实现上,我们只要记录一下每个人在[1~r1]内拿了多少,在[r+1~p]内拿了多少
最后我们只要判断一下最后一个人有没有在[1~r1]内拿东西就好了

//这里写代码片
#include<cstdio>
#include<iostream>
#include<cstring>using namespace std;const int N=100010;
int n,r[N],lef[N],righ[N];//判断0个礼物是否足够
//left[i]是第i个人拿到的左边的礼物的总数,right同理
int pd(int p)
{int x=r[1],y=p-r[1];                       //左边的个数,右边的个数 lef[1]=r[1]; righ[1]=0;for (int i=2;i<=n;i++){if (i&1){righ[i]=min(r[i],y-righ[i-1]);   //尽量拿左边的礼物 lef[i]=r[i]-righ[i];}else{lef[i]=min(r[i],x-lef[i-1]);     //尽量拿右边的礼物righ[i]=r[i]-lef[i]; }}return lef[n]==0;
} int main()
{while (scanf("%d",&n)!=EOF&&n){for (int i=1;i<=n;i++) scanf("%d",&r[i]);if (n==1)                            //1的情况要特判 {printf("%d",r[1]);continue;}int L=r[1]+r[n];int R=0;for (int i=1;i<n;i++) L=max(L,r[i]+r[i+1]);if (n&1){for (int i=1;i<=n;i++) R=max(R,r[i]*3);while (L<R){int mid=L+(R-L)/2;if (pd(mid))R=mid;else L=mid+1;}       }printf("%d\n",L);}return 0;
}

转载于:https://www.cnblogs.com/wutongtong3117/p/7673017.html

相关文章:

Redis数据库设置密码

Redis数据库的默认打开方式为无密码打开&#xff0c;现在要将其设置为以密码形式打开。 Redis文件夹内容1、修改配置文件 在redis.windows.conf文件中设置密码的命令中添加requirepass 123456一行&#xff0c;将Redis数据库的密码设置为123456 2、运行redis-server.exe程序 3…

沉甸甸的证书,沉甸甸的心情

今天收到了由电子工业出版社易飞思公司转寄的我在由51CTO、中国图书商报、互动出版网等单位联办的“2008年度最佳技术图书和原创作者评选”活动&#xff08;这是第二届了&#xff09;中所获得的“2008年度最佳原创作者”证书&#xff08;证书见下&#xff0c;非常精美&#xff…

windows :Tomcat免安装版环境变量配置 + jdk配置

1. 下载后解压&#xff0c;我解压的目录为&#xff1a;D:\Tomcat\apache-tomcat-9.0.1-windows-x64 2. 安装jdk和jre, 并配置环境变量&#xff1b; 2.1 用户变量新建JAVA_HOME&#xff1b; 2.2 系统变量CLASSPATH中添加&#xff1a;.;C:\Program Files\Java\jdk1.8.0_144\lib…

将数据库查询结果导出成Excel表格

使用Java代码&#xff0c;从数据库中获取结果集&#xff0c;将结果集导出成Excel表格形式。 从数据库中查询学生表所有数据&#xff0c;将其导出成Excel表格&#xff0c;点击查看学生表表结构 。 package com.test.test.test1;import com.test.test.db.StudentDb; import com.…

【Java_基础】Java中Native关键字的作用

本篇博文转载与&#xff1a;Java中Native关键字的作用转载于:https://www.cnblogs.com/leiblog/p/10529056.html

在SQL Server 2000 和SQL Server 2005中导出表结构

SQL Server 2000 SELECT 表名 case when a.colorder1 then d.name else end, 表说明 case when a.colorder1 then isnull(f.value,) else end, 字段名 a.name, 主键 case when exists(SELECT 1 FROM sysobjects where xtypePK and p…

百度、谷歌理念对对碰

尽管百度和谷歌哪个更好用是用户自己说了算,但它们对搜索引擎的理解和理念到底有多少异同?它们将带给用户一个怎样的搜索未来? 为了更好地看清这些问题,《第一财经日报》分别向两公司提出了如下问题,且听它们的回答.1.搜索结果提供得尽可能多,是否会提升搜索质量? 并不是搜索…

2019 GDUT Rating Contest I : Problem H. Mixing Milk

题面&#xff1a; H. Mixing Milk Input file: standard inputOutput file: standard outputTime limit: 1 secondMemory limit: 256 megabytesFarming is competitive business – particularly milk production. Farmer John figures that if he doesn’t innovate in his mi…

托管调试助手报错

今天在调试程序时出现下面的异常: 其他信息: CLR 无法从COM 上下文0x1a0e50 转换为COM 上下文0x1a0fc0&#xff0c;这种状态已持续60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送Windows 消息的情况下处理一个运行时间非常长的操作。这种情况通常会影…

在文件中查找指定字符串

1. 在指定文件中查看指定字符串的行数 cat file_name | grep -n "String" 2. 在多个文件中查找指定字符串 在多个指定文件中查找指定字符串&#xff0c;命令如下&#xff1a;grep -l "String" file1 file2 file3-l : 列出包含特定字符串的文件名称&#…

FPGA研发之道(25)-管脚

管脚是FPGA重要的资源之一&#xff0c;FPGA的管脚分别包括&#xff0c;电源管脚&#xff0c;普通I/O&#xff0c;配置管脚&#xff0c;时钟专用输入管脚GCLK等。 本文引用地址&#xff1a;http://www.eepw.com.cn/article/266429.htm (1)电源管脚&#xff1a; 通常来说&#xf…

函数组:SDIFRUNTIME

函数组&#xff1a;SDIFRUNTIME&#xff1b;Interfaces for Type Runtime Objects&#xff0c;获得与表相关的数据信息。 包含函数模块&#xff1a; DDIF_FIELDINFO_GET&#xff1a;DD&#xff1a;读取表格字段信息的接口&#xff0c;获得一个表中全部或部分字段的信息。DDIF_F…

原来AGILE就是这么一回事啊!

仅仅还在几年前&#xff0c; XP 还被认为是方法异教&#xff0c; FDD 属于黑客程序方法。如今&#xff0c;敏捷俨然已经成为主流学说&#xff0c;敏捷方法成为人们学习和讨论的热点。敏捷方法的应用也更加广泛&#xff0c;以至于不少外包项目都要求采用某种敏 捷方法。它不仅仅…

开发微信小程序入门前

开发微信小程序入门前 百牛信息技术bainiu.ltd整理发布于博客园 2016年09月21日晚 微信发不了微信“小程序”的内测版&#xff0c;一时间整个互联网都炸了锅。个大新闻、论坛都在讨论这个事情。 作为互联网的一猿&#xff0c;我们怎能不紧跟时代的脚步。于是第二天上午也对微信…

hive的join

第一&#xff1a;在map端产生join mapJoin的主要意思就是&#xff0c;当链接的两个表是一个比较小的表和一个特别大的表的时候&#xff0c;我们把比较小的table直接放到内存中去&#xff0c;然后再对比较大的表格进行map操作。join就发生在map操作的时候&#xff0c;每当扫描一…

表格在线转换工具

表格在线转换工具 &#xff1a;https://tableconvert.com/ —— END ——

Android之View绘制流程源码分析

版权声明&#xff1a;本文出自汪磊的博客&#xff0c;转载请务必注明出处。 对于稍有自定义View经验的安卓开发者来说&#xff0c;onMeasure&#xff0c;onLayout&#xff0c;onDraw这三个方法都不会陌生&#xff0c;起码多少都有所接触吧。 在安卓中&#xff0c;一个View显示到…

看不懂的生成函数

不得不说这个东西真是妙啊 遭到了降智打击 生成函数又叫做母函数&#xff0c;主要用于解决一些组合数学问题 对于一个数列\(\{f_0,f_1,f_2,...,f_n\}\) 我们定义其生成函数为 \[F(x)f_0f_1xf_2x^2...f_nx^n\] 也就是 \[F(x)\sum_{i0}^nf_ix^i\] 也就是把数列的每一项当成了多项…

Coolite Toolkit学习笔记五:常用控件Menu和MenuPanel

Coolite Toolkit里的Menu控件和其他的.NET Web控件不一样&#xff0c;如果只是设计好了Menu或是通过程序初始化菜单项&#xff0c;菜单是不会呈现在界面上的&#xff0c;因为Coolite Toolkit规定Menu控件需要一个容器来做依托&#xff0c;而这个让Menu依托的控件就是MenuPanel&…

解决Neither the JAVA_HOME nor the JRE_HOME environment variable is defined问题

问题描述&#xff1a; 在cmd窗口使用 startup 命令启动Tomcat时&#xff0c;出现 Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program 错误提示&#xff0c;如下如所示。 解…

在 Windows XP 中,无法使用 Windows 图片和传真查看器来查看图片

在 Microsoft Windows XP 中试图使用 Windows 图片和传真查看器查看图片时&#xff0c;图片未按预期显示。不过&#xff0c;当使用 Microsoft 画图工具查看图片时&#xff0c;图片会按预期显示。注意&#xff1a;Windows 资源管理器中可能不会显示某些图片缩略图。 发生这种现象…

前端常用正则表达式

前端常用的正则表达式 通过一些例子来学习正则表达式摘录&#xff0c;js正则函数match、exec、test、search、replace、split //去除首尾的‘/’input input.replace(/^\/*|\/*$/g,);javascript:; 、javascript:void(0)javascript:;.match(/^(javascript\s*\:|#)/);//["j…

BeanShell使用json.jar包处理Json数据

环境准备 ①Jmeter版本 &#xff0c;JDK ②前置条件&#xff1a;将json.jar包置于..\lib\下&#xff0c; 如果还是报错&#xff0c;可以将该jar包添加到测试计划的Library中&#xff1b;否则会报&#xff1a;Typed variable declaration : Class: JSONObject not found in nam…

ES6 let和const 命令

ES6 let 和 const 命令1. 变量声明2. 变量提升问题3. 暂时性死区(TDZ)4. 块级作用域4.1 为什么需要块级作用域&#xff1f;4.2 ES6的块级作用域4.3 块级作用域和函数声明1. 变量声明 ES5 只有两种声明变量的方法&#xff1a;var命令和function命令。 ES6 新增了let命令和cons…

jQuery的Tab插件 Tabtastic

Tabtastic 是一个 jQuery 用来实现 Tab 窗体的插件&#xff0c;支持 Tab 嵌套以及动态内容加载。 下面是源文件下载&#xff1a;Tabtastic转载于:https://www.cnblogs.com/zhulidong/archive/2009/11/01/1593753.html

另类×××应用(三):不花一分钱,实现总部和多分支机构网络互联

[本文高清PDF版&#xff0c;在文章最后的附件提供下载&#xff0c;欢迎下载查阅] 【需求分析】&#xff08;一&#xff09;我们面临的问题。Freesky公司是一家在台湾和大陆都有很多分支机构的大饼油条连锁经销商&#xff0c;大陆总部在宁波&#xff0c;在宁波、温州、上…

[SDOI2017]天才黑客

传送门 Description 给出一张带边权的有向图&#xff0c;每个边都上都有一个字符串&#xff08;给出对应Trie树上的节点&#xff09;&#xff0c;一条路径的长度为路径上的边权之和相邻两条边的字符串的lcp长度之和。 求从1到其它节点的最短路 Solution 预备部分 首先&#…

spine - unity3D(摘自博主softimagewht)

摘自&#xff1a;&#xff08;博主 http://www.cnblogs.com/softimagewht/p/4149118.html&#xff09; //skeletonDataSkeletonAnimation skeletonAnimation GetComponent<SkeletonAnimation>();Debug.Log(skeletonAnimation.name);//获取角色名Debug.Log(skeletonAnima…

Windows搜索工具 — Everything

everything 主页 &#xff1a;https://www.voidtools.com/zh-cn/ Everything&#xff1a;是 Windows 上一款搜索引擎&#xff0c;它能够基于文件名快速定文件和文件夹位置。 下载链接&#xff1a;https://www.voidtools.com/zh-cn/downloads/ —— END ——

向访客和爬虫显示不同的内容

为了提高网页的用户体验, 我们经常会做一些对搜索引擎不太友好的事情, 但某些情况下这并不是无法挽回的, 可以通过向自然人和搜索引擎机器人显示不同的内容来提供好的用户体验和 SEO. 听说本方法会触犯搜索引擎的一些操作原则, 有可能被被各搜索引擎处罚, 甚至删除网站. 所以我…