语音评测系统 2019 计蒜之道 初赛 第六场 多个特殊二次函数(同样形状)的最小值 它与多条直线最小值的互换...

本文主要是介绍语音评测系统 2019 计蒜之道 初赛 第六场 多个特殊二次函数(同样形状)的最小值 它与多条直线最小值的互换...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

https://nanti.jisuanke.com/t/39458

 

n个函数的形状是一致的,只是大小不同

 

a按照从小到大排序,

设当前最小值的区间段为

(u1,u2) ai1

(u2,u3) ai2

……

[其中i1<i2<...]

 

加上一个新的函数,若它与函数ik交于点ur,则它必大于段(u1,u2),...,(uk-1,uk),必小于段(uk+1,uk+2),(uk+2,uk+3),...。

 

经过修改过,段变为(u1,u2),...,(uk-1,uk),(uk,ur),(ur,inf)

使用单调栈处理,每个段最多被加入或删除一次

 同理,对于函数(x+a)^2+b,它可以转变x^2+2ax+b,在进行函数比较时,都有x^2,则可以转变为直线的比较,

对于直线,同样满足凸包性质

如题目[JSOI2008]Blue Mary开公司,可以像本题一样,使用排序+单调栈

当然如果修改为线段,李超树大法好,https://i.cnblogs.com/PostDone.aspx?postid=11156309&actiontip=%e4%bf%9d%e5%ad%98%e4%bf%ae%e6%94%b9%e6%88%90%e5%8a%9f

 

https://nanti.jisuanke.com/t/39458代码

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <string>
 5 #include <cmath>
 6 #include <algorithm>
 7 #include <iostream>
 8 using namespace std;
 9 #define ll long long
10 
11 const int maxn=1e6+10;
12 const double eps=1e-8;
13 
14 ll a[maxn],b[maxn],c[maxn],d[maxn];
15 int u[maxn];
16 double v[maxn];
17 
18 double cal(int i,int j)
19 {
20     return (c[i]+c[j]+1.0*(d[i]-d[j])/(c[i]-c[j]))/2;
21 }
22 
23 int main()
24 {
25     bool vis=0;
26     int n,m=0,q,i,g;
27     ll r,y;
28     double x;
29     scanf("%d",&n);
30     for (i=1;i<=n;i++)
31         scanf("%lld",&a[i]);
32     for (i=1;i<=n;i++)
33         scanf("%lld",&b[i]);
34 
35     a[n+1]=a[n]+1;
36     r=1e18;
37     for (i=1;i<=n;i++)
38     {
39         r=min(r,b[i]);
40         if (a[i]!=a[i+1])
41         {
42             c[++m]=a[i];
43             d[m]=r;
44             r=1e18;
45         }
46     }
47 
48     g=0;
49     for (i=1;i<=m;i++)
50     {
51         while (g>=2 && cal(i,u[g])<v[g])
52             g--;
53 
54         g++;
55         u[g]=i;
56         if (g>=2)
57             v[g]=cal(u[g],u[g-1]);
58     }
59 
60 //    for (i=1;i<=g;i++)
61 //        printf("%d %.5f\n",u[i],v[i]);
62 
63     i=2;
64     scanf("%d",&q);
65     while (q--)
66     {
67         scanf("%lf",&x);
68         while (i!=g+1 && v[i]<x)
69             i++;
70         if (!vis)
71             vis=1;
72         else
73             printf(" ");
74         y=(ll)x;
75         printf("%lld",(y-c[u[i-1]])*(y-c[u[i-1]])+d[u[i-1]]);
76     }
77     return 0;
78 }
79 /*
80 3
81 1 3 5
82 0 1 2
83 9
84 -1000000 -1 0 1 2 3 4 5 1000000
85 1000002000001 4 1 0 1 1 2 2 999990000027
86 
87 3
88 1 3 5
89 0 1 -10
90 9
91 -1000000 -1 0 1 2 3 4 5 1000000
92 
93 4
94 1 1 2 2
95 0 -3 1000 -5
96 5
97 1 2 3 4 5
98 -4 -5 -4 -1 4
99 */

 

转载于:https://www.cnblogs.com/cmyg/p/11160344.html

这篇关于语音评测系统 2019 计蒜之道 初赛 第六场 多个特殊二次函数(同样形状)的最小值 它与多条直线最小值的互换...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/214831

相关文章

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github