真是非常可惜……一是阈值不会用;二是期望不熟悉。考场的idea已经直逼标算了。

题目描述

乐滋滋经常参加各种拍卖会,前不久,他收到了来自滋滋国最大的商店——奥义商店的拍卖会邀请函。

为了让拍卖会看起来更加奥妙重重,奥义商店设置了一个极为复杂的拍卖规则:一共 $n$ 个物品排成一排,第 $i$ 个物品价格是 $v_i$​ 。对于一次拍卖,商店会指定 $t$ 种颜色,并对每种颜色指定一个数目 $c_j$​ 满足 $\sum_{j=1}^{t}c_j=n-1$ ,另外还会指定一个下标 $k$ 和一个公差 $d$ 。

买家需要给第 $k$ 个物品染上一种颜色(在 $t$ 种颜色中选择一种)。接着,把剩下的 $n-1$ 个物品随机染成 $t$ 种颜色之一,并保证这 $n-1$ 个物品中第 $j$ 种颜色的恰好有 $c_j$​个。

买家需要购买的物品按这样的方式计算:找到 $k$ 所在的最长的以 $d$ 为公差的等差数列 $a_x=kx+d(x\in [L,R],L\le 0 \le R)$ 满足其中所有物品都与第 $k$ 个物品同色。买家需要买下这个等差数列中的所有物品,显然花费就是 $\sum_{x=L}^{R}v_{k+xd}$​ 。

乐滋滋最近出现了点“经济危机”,希望你能帮他给第 $k$ 个物品选择合适的颜色,以此来最小化他花费的期望,你只需要输出这个期望即可。

当然商品的价格是可能出现变动的,你需要维护这些变化。

数据范围

$1 \leq n,m \leq 10^5$


题目分析

我考试时候在想什么,为什么现在看这题觉得好简单啊……

不知道过几天还会不会做

这里是一些零碎的做完题的想法:既然要求期望代价最小,那么每一次第$k$个物品应该染成$min$ $c_j$。然后把期望拆开,就是每一个位置被统计到的概率乘以它的权值。这个概率不是很难算,就是从前一个位置转移过来的概率。

以上就是一个正确但是非常慢的想法。

算法的复杂度是$O(mn/d)$的,当$d$比较小时,复杂度就接近$O(nm)$。

可能会说:那么把d阈值一下就好了嘛,d小的时候用$s[d][j]$表示模$d$为j的vi总和。然而只阈值d只能在$t=1$时有效。若$t!=1$还是需要枚举计算期望。然后非常玄学的精度阈值就来了:

但是要注意!最好不要形如 if (sta*v[k-i*d] < 1e-13) break; 的精度阈值。因为尽管看上去增量已经很小了,但实际上是不能这样“意会”的。

所以以上就是这题的两个玄学阈值。

 1 #include<cstdio>
 2 #include<cctype>
 3 const int maxn = 100035;
 4
 5 double ans,sta,s[103][103];
 6 int n,m,t,k,d,mn;
 7 int v[maxn],c[maxn];
 8
 9 int read()
10 {
11     char ch = getchar();
12     int num = 0;
13     bool fl = 0;
14     for (; !isdigit(ch); ch=getchar())
15         if (ch=='-') fl = 1;
16     for (; isdigit(ch); ch=getchar())
17         num = (num<<1)+(num<<3)+ch-48;
18     if (fl) num = -num;
19     return num;
20 }
21 int min(int a, int b){return a<b?a:b;}
22 int main()
23 {
24     freopen("lzz.in","r",stdin);
25     freopen("lzz.out","w",stdout);
26     n = read(), m = read();
27     for (int i=1; i<=n; i++)
28     {
29         v[i] = read();
30         for (int j=1; j<=100; j++)
31             s[j][i%j] += v[i];
32     }
33     while (m--)
34     {
35         int opt = read();
36         if (opt==1){
37             int x = read(), y = read();
38             for (int j=1; j<=100; j++)
39                 s[j][x%j] += y-v[x];
40             v[x] = y;
41         }else{
42             t = read(), k = read(), d = read(), mn = n-1, ans = v[k], sta = 1.0;
43             for (int i=1; i<=t; i++) c[i] = read(), mn = min(mn, c[i]);
44             if (t==1){
45                 if (d<=100) ans = s[d][k%d];
46                 else{
47                     for (int i=k+d; i<=n; i+=d) ans += v[i];
48                     for (int i=k-d; i>=1; i-=d) ans += v[i];
49                 }
50             }else{
51                 for (int i=1; i<=100&&k+i*d<=n; i++)
52                 {
53                     sta *= 1.0*(mn-i+1)/(n-i);
54                     ans += sta*v[k+i*d];
55                 }
56                 sta = 1.0;
57                 for (int i=1; i<=100&&k-i*d>=1; i++)
58                 {
59                     sta *= 1.0*(mn-i+1)/(n-i);
60                     ans += sta*v[k-i*d];
61                 }
62             }
63             printf("%.6lf\n",ans);
64         }
65     }
66     return 0;
67 }

鬼知道我考试时候在写什么……

#include<bits/stdc++.h>
const int maxn = 100035;double ans,sta;
int n,m,t,k,d,mn;
int v[maxn],c[maxn];int read()
{char ch = getchar();int num = 0;bool fl = 0;for (; !isdigit(ch); ch=getchar())if (ch=='-') fl = 1;for (; isdigit(ch); ch=getchar())num = (num<<1)+(num<<3)+ch-48;if (fl) num = -num;return num;
}
int main()
{freopen("lzz.in","r",stdin);freopen("lzz.out","w",stdout);n = read(), m = read();for (int i=1; i<=n; i++) v[i] = read();while (m--){int opt = read();if (opt==1){int x = read(), y = read();v[x] = y;}else{t = read(), k = read(), d = read(), mn = n-1, ans = v[d], sta = 1.0;for (int i=1; i<=t; i++) c[i] = read(), mn = std::min(mn, c[i]);for (int i=2; i<=c[i]+1; i++){sta *= (c[i]-i+2.0)/(n-i+1.0);ans += sta*v[i];}printf("%.6lf\n",ans);}}return 0;
}

鬼畜代码

END

转载于:https://www.cnblogs.com/antiquality/p/9740008.html

【思维题 阈值 期望】10.3奥义商店相关推荐

  1. little w and Soda(思维题)

    链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  2. ZOJ 3829 贪心 思维题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...

  3. yoyo思维题(困难) 组合数学

    问题 B: yoyo思维题(困难) 时间限制: 1 Sec  内存限制: 256 MB 提交: 11  解决: 3 [提交][状态][讨论版][命题人:qianyouyou][Edit] [TestD ...

  4. 思维题 UVA 10881 Piotr's Ants

    题目传送门 1 /* 2 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 3 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 4 关键2:蚂蚁的相对位置 ...

  5. CF--思维练习-- CodeForces - 215C - Crosses(思维题)

    ACM思维题训练集合 There is a board with a grid consisting of n rows and m columns, the rows are numbered fr ...

  6. 贪心/思维题 UVA 11292 The Dragon of Loowater

    题目传送门 1 /* 2 题意:n个头,m个士兵,问能否砍掉n个头 3 贪心/思维题:两个数组升序排序,用最弱的士兵砍掉当前的头 4 */ 5 #include <cstdio> 6 #i ...

  7. Codeforces 1077B Disturbed People(思维题)

    Codeforces 1077B Disturbed People(思维题) There is a house with nn flats situated on the main street of ...

  8. codeforces 有意思的思维题 1 ~ 15

    codeforces 思维题 1.给定数组,求满足i < j and ai * aj = i + j的数对数量 2.第 i 步向前跳 i 步或后退 1 步 3.给两个点,求正方形的另两个点 4. ...

  9. 思维题 URAL 1409 Two Gangsters

    题目传送门 1 /* 2 思维题:注意题目一句话:At some moment it happened so that they shot one and the same can. 3 如果两个人都 ...

最新文章

  1. Android系统默认Home应用程序(Launcher)的启动过程源代码分析
  2. Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解+完整代码)
  3. String类的学习
  4. 【设计模式】代理模式 ( 动态代理 )
  5. 【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )
  6. 如何关闭uefi启动模式|预装win8/win10电脑禁用uefi引导方法
  7. appium查看控件的方法
  8. windows和ubuntu双系统设置开机默认系统
  9. 返回指定月份的周列表 包含 周序号、开始日期、结束日期(不包含周末)
  10. oracle账号密码修改后特别容易锁定_Oracle数据库用户锁定原因以及处理方式(ORA-28000)...
  11. python匹配字符串_字符串匹配算法之Kmp算法(Python实现)
  12. python跟php服务器对比_python学习笔记一和PHP的一些对比
  13. 强制选择“你是不是喜欢我” python实现
  14. Python调用百度地图api查询经纬度
  15. matlab中的hold on/off、grid on/off 命令使用方法
  16. 制作好的种子怎么上传服务器,用BT如何上传自己的文件?
  17. python爬虫之批量下载小说
  18. PAT A1008 Elevate
  19. java ipv6校验_IPV6地址校验(java)
  20. 数据结构—排序(第九章)

热门文章

  1. JAVA JSP水费管理系统JSP电费管理系统JSP缴费管理系统JSP水费缴费系统JSP水电费管理
  2. 毛毛雨的博客乐园—内容简介
  3. Python——递归:这帮小兔崽子、汉诺塔
  4. 界面开发(3)--- PyQt5用户登录界面连接数据库
  5. 如何从App Store排行榜中脱颖而出
  6. linux. 获得cpu利用率 arm,Linux如何统计进程的CPU利用率
  7. 谷歌的语音识别利器,最先造福了自己的员工
  8. 中国火星车登陆,对地“网速“只有16bps
  9. 基于python3+opencv3遥感影像的湖泊边界提取
  10. 有一个强大又好看的,赛过Typora,阿里开发的语雀编辑器