语音评测系统 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

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

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: 使用