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

相关文章

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI