2018.02.12 noip模拟赛T2(未完待续)

Posted んцγυfёìfのι

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018.02.12 noip模拟赛T2(未完待续)相关的知识,希望对你有一定的参考价值。

二兵的赌注

Description
游戏中,二兵要进入了一家奇怪的赌场。
赌场中有n个庄家,每个庄家都可以猜大猜小,猜一次一元钱。
每一次开彩前,你都可以到任意个庄家那里下赌注。
如果开彩结果是大,你就可以得到你之前猜大的庄家相应的ai元钱。
如果开彩结果是小,你就可以得到你之前猜小的庄家相应的bi元钱。
你可以在同一个庄家那里既猜大又猜小,(这样是两块钱),也可以什么都不猜(这样不用钱)。
问怎么样下注,才能赢得最多的有保障的钱。
有保障的钱指不管开彩结果是大是小,你都能够赢得相应的钱。
你能帮助他计算这个值吗?
Input
第一行一个数字N。表示有N个庄家。
接下来N行,每行2个实数,分别表示这个庄家的ai和bi。
Output
一个四位小数,表示最多能赢的有保障的钱。
Sample Input
4
1.4 3.7
1.2 2
1.6 1.4
1.9 1.5
Sample Output
0.5000
HINT
样例中,最好的策略是赌第一个庄家开小,第三、第四个庄家开大
测试点 N
1 N≤10


2
3 N≤1000


4
5
6
7 N≤100000
8
9
10


1.0 ≤ ai, bi ≤ 1000.0

1s/128M

 

 

好了,拿到题先花一定的时间弄清题意。

然后我们就会发现:押大小和哪个庄家之间完全没有关系,一个庄家的大和小完全是独立的。继续分析,显然押越大的越好。

于是我们分别sort一下。

然后我开始了分析:首先读入时-=1,然后,设大或小为a[]和b[],分别取前i.j个押。

然后对于每对确定的i,j,易知s=min(suma[i]-j,sumb[j]-i)其中sum为前缀和。

我们设suma[i]-j=左,sumb[j]-i=右

然后定性分析:

当j固定时,i+则左+右-,i-则左-右+

当i固定时,j+则左-右+,j-则左+右-

再次分析可知对于一对(i,j),若i+,则可能存在的ans>s必须令j+

于是有了以下思路:for(i:1...n) 对于每个i找到匹配的j,则i++时j不用从头开始枚举,只需继续j++,于是时间复杂度O(n)完成(不记sort)

以上是我在考场上的思路。不管思考过程多么艰难以至于花费1hour才想出来,但是结果就是,和标准程序简直一模一样。但是代码实现上就很naive了。

同一个思路,我代码实现起来写了都要40+行,再一看标程,不到十行就解决了,尴尬......

我的代码大概是这样

 

 

以上是关于2018.02.12 noip模拟赛T2(未完待续)的主要内容,如果未能解决你的问题,请参考以下文章

NOIP的板子们 (未完待续)

你好 数论(未完待续)

noip2016复赛模拟 未完(现在160分)

noip2017考前整理(未完)

使用FPGA开发板驱动VGA显示器(未完待续)

2017 9 11 noip模拟赛T2