【UOJ386】【UNR #3】鸽子固定器 链表
题目描述
有 \(n\) 个物品,每个物品有两个属性:权值 \(v\) 和大小 \(s\)。
你要选出 \(m\) 个物品,使得你选出的物品的权值的和的 \(d_v\) 次方减掉大小的极差的 \(d_s\) 次方最大。
\(n\leq 200000,m\leq 50,1\leq d_v,d_s\leq 2\)
题解
1. 如果选的物品的数量不到 \(m\) 个,且大小不是连续的,那么一定不是最优的。
因为如果不是连续的,那么可以多选一个大小在这些物品之间的物品,使答案更优。
2. 如果选了 \(m\) 个物品,那么可以枚举权值最小的物品 \(i\),可以发现,选的物品的大小组成了一个包含 \(i\) 的区间。这样的区间最多只有 \(O(m)\) 个。
否则可以删掉 \(i\) 这个物品,换上一个权值更大的物品,使答案更优。
可以用一个链表维护物品的大小组成的序列。
时间复杂度:\(O(nm)\)
题解
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=200010;
int l[N],r[N];
int n,m,ds,dv;
ll s[N];
ll fp(ll a,int b)
{
return b==1?a:a*a;
}
ll calc(ll x,ll y)
{
return fp(x,dv)-fp(y,ds);
}
void del(int x)
{
r[l[x]]=r[x];
l[r[x]]=l[x];
}
struct pp
{
int s,v,c;
};
pp a[N],b[N],c[N];
int cmp1(pp a,pp b)
{
return a.s<b.s;
}
int cmp2(pp a,pp b)
{
return a.v<b.v;
}
int t;
ll ans;
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
scanf("%d%d%d%d",&n,&m,&ds,&dv);
for(int i=1;i<=n;i++)
scanf("%d%d",&a[i].s,&a[i].v);
sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++)
{
a[i].c=i;
b[i]=a[i];
}
for(int i=1;i<=n;i++)
{
ll temp=0;
for(int j=i;j<=n&&j<=i+m-1;j++)
{
temp+=a[j].v;
ans=max(ans,calc(temp,a[j].s-a[i].s));
}
}
sort(a+1,a+n+1,cmp2);
for(int i=0;i<=n;i++)
r[i]=i+1;
for(int i=1;i<=n+1;i++)
l[i]=i-1;
for(int i=1;i<=n;i++)
{
t=0;
for(int j=a[i].c,k=1;j>=1&&k<=m;j=l[j],k++)
c[++t]=b[j];
reverse(c+1,c+t+1);
for(int j=r[a[i].c],k=2;j<=n&&k<=m;j=r[j],k++)
c[++t]=b[j];
for(int j=1;j<=t;j++)
s[j]=s[j-1]+c[j].v;
for(int j=m;j<=t;j++)
ans=max(ans,calc(s[j]-s[j-m],c[j].s-c[j-m+1].s));
del(a[i].c);
}
printf("%lld\n",ans);
return 0;
}
【UOJ386】【UNR #3】鸽子固定器 链表的更多相关文章
- UOJ#386. 【UNR #3】鸽子固定器(链表)
题意 题目链接 为了固定S**p*鸽鸽,whx和zzt来到鸽具商店选购鸽子固定器. 鸽具商店有 nn 个不同大小的固定器,现在可以选择至多 mm 个来固定S**p*鸽鸽.每个固定器有大小 sisi 和 ...
- UOJ.386.[UNR #3]鸽子固定器(贪心 链表)
题目链接 \(Description\) 选最多\(m\)个物品,使得它们的\((\sum vi)^{dv}-(s_{max}-s_{min})^{du}\)最大. \(Solution\) 先把物品 ...
- #386. 【UNR #3】鸽子固定器
#386. [UNR #3]鸽子固定器 题目链接 官方题解 分析: 神奇的做法+链表. 首先按照大小排序. 对于小于选择小于m个物品的时候,这个m个物品一定是一段连续的区间.因为,如果中间空着一个物品 ...
- 【UOJ#386】【UNR#3】鸽子固定器(贪心)
[UOJ#386][UNR#3]鸽子固定器(贪心) 题面 UOJ 题解 一个不难想到的暴力做法是把东西按照\(s\)排序,这样子我们枚举极大值和极小值,那么我们选择的一定是这一段之间\(v\)最大的那 ...
- uoj386 【UNR #3】鸽子固定器
link (似乎很久没写题解了) 题意: n个物品,每个物品有a,b两个值,给定A,B,现在最多选其中m个,要求最大化选出的物品中[b权值和的B次方-a极差的A次方]. $n\leq 2\times ...
- uoj#386. 【UNR #3】鸽子固定器(乱搞)
传送门 题解 //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define fp(i ...
- [UOJ386]鸽子固定器
题解 堆+贪心 题意就是给你\(n\)个物品,让你最多选\(m\)个 每个物品有两个属性\(a_i,b_i\) 最大化\((\sum_{a_i})^{dv}+(max(b_i)-min(b_i))^{ ...
- UNR#3 Day1——[ 堆+ST表+复杂度分析 ][ 结论 ][ 线段树合并 ]
地址:http://uoj.ac/contest/45 第一题是鸽子固定器. 只会10分.按 s 从小到大排序,然后 dp[ i ][ j ][ k ] 表示前 i 个元素.已经选了 j 个.最小值所 ...
- 数据结构之链表C语言实现以及使用场景分析
牢骚:本篇博客两个星期前已经存为草稿,鉴于发生一些糟糕的事情,今天才基本完成.本人6月份应届毕业生一枚,毕业后当天来到帝都,之后也非常顺利,面试了俩家公司都成功了.一家做C++方面电商ERP,一家做w ...
随机推荐
- mysql特殊查询----分组后排序
使用的示例表 学生表----student 表结构 数据 查询方法 一.第一种方法 我认为这是比较传统,比较容易理解的一种方式,使用自连接,并在连接条件中作比较,之后再对查询条件分组统计,排序. se ...
- 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇)(1) - 目录
昨天发表了<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>后,大家十分热情,几个小时内就收到了不少问题,包括: 对于ui自动化测试这方 ...
- IEC104协议规约解析
一.四遥信息体基地址范围 104调度规约有1997年和2002年两个版本,在流程上没有什么变化,02版只是在97版上扩展了遥测.遥信等信息体基体址,区别如下: 类别 1997版基地址 2002版基地址 ...
- C#判断远程计算机的指定端口是否打开的代码
如下的内容段是关于C#判断远程计算机的指定端口是否打开的内容,应该能对小伙伴有一些用. using System.Net;if(!string.IsNullOrEmpty(txtPort.Text)) ...
- Network Policy - 每天5分钟玩转 Docker 容器技术(171)
Network Policy 是 Kubernetes 的一种资源.Network Policy 通过 Label 选择 Pod,并指定其他 Pod 或外界如何与这些 Pod 通信. 默认情况下,所有 ...
- 前后端分离djangorestframework——ContentType组件表
ContentType ContentType其实django自带的,但是平时的话很少会用到,所以还是放在Djangorestframework这个部分 作用: 在实际的开发中,由于数据库量级大,所以 ...
- c/c++浮点数在内存中存储方式
转自:https://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html 任何数据在内存中都是以二进制的形式存储的,例如一个shor ...
- Canadian-dollar_RMB
import pandas as pd import matplotlib.pyplot as plt import statsmodels as sm from statsmodels.graphi ...
- SQLServer之创建LOGON触发器
LOGON触发器工作原理 登录触发器将为响应 LOGON 事件而激发存储过程. 与 SQL Server实例建立用户会话时将引发此事件. 登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前 ...
- MapReduce shuffle过程剖析及调优
MapReduce简介 在Hadoop MapReduce中,框架会确保reduce收到的输入数据是根据key排序过的.数据从Mapper输出到Reducer接收,是一个很复杂的过程,框架处理了所有问 ...