bzoj4030【HEOI2015】小L的白日梦
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=4030
sol :orz Yousiki http://www.cnblogs.com/yousiki/p/6490769.html
orz jiry http://jiruyi910387714.is-programmer.com/posts/90425.html
有三个结论:
1、一定存在一个最优解,使得每天不高兴的概率单调递增
这个结论很显然,考虑对于一组逆序对将其交换,答案更优
2、一定存在最优解,由排序后的一段前缀+一段后缀构成
如果把前缀一个点放到中间比原来优,那么把这个点放到后面一定更优(或者一样)
3、每一种选取的项目有三种可能:选一个,全选,其他,且第三种至多一个
这个不会证QAQ,Yousiki大佬说随便想想就知道了QAQ
这样的话就可以假设第三种情况在后缀(前后缀分别做一次),
线性往后扫前缀,每次向后跳一个块,考虑后缀的期望会怎么更新,再处理一个快+1的情况即可
可以把一个点拆成三个:1,cnt,1,这样写起了方便一些,不用再特判
代码莫名其妙数据一大就WA.......完全不知道为什么QAQ,弃疗了,cogs最后一个点还莫名其妙过了....50points
#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #define inf 1e18 #define double long double #define int long long using namespace std; const int Mx=100010; struct Node { int c; double p,w; } A[3*Mx],tmp[Mx]; bool cmp(Node a,Node b) { return a.p>b.p; } int n,k,tot,now,sigma; double ans,sum; void solve() {sum=0,now=1,sigma=k;for(int i=n;i>=1;i--) sum+=(A[i].c-1)*A[i].w+(1-A[i].p)*A[i+1].p,sigma-=A[i].c;for(int i=1;i<=n;i++){sigma-=A[i].c;while(now<=n&&sigma<=0) sum-=(A[now].c-1)*A[now].w+(1-A[now].p)*A[now+1].p,sigma+=A[now++].c;if(sigma<=0) break; sum+=(A[i].c-1)*A[i].w+(1-A[i-1].p)*A[i].p;ans=min(ans,sum+(sigma-1)*A[now-1].w+(1-A[now-1].p)*A[now].p+(1-A[i].p)*A[now-1].p);}sigma=k,sum=0;//初始状态for(int i=1,mn=min(sigma,A[i].c);i<=n&&mn;i++)sigma-=mn,sum+=(mn-1)*A[i].w+(1-A[i-1].p)*A[i].p;ans=min(ans,sum); } signed main() {int T; scanf("%lld",&T);while(T--){scanf("%lld%lld",&n,&k);for(int i=1,x,y;i<=n;i++)scanf("%lld/%lld%lld",&x,&y,&tmp[i].c),tmp[i].p=(double) x/y,tmp[i].w=(1-tmp[i].p)*tmp[i].p;sort(tmp+1,tmp+1+n,cmp); tot=0;for(int i=1;i<=n;i++)//拆点{if(tmp[i].c==1) A[++tot]=tmp[i];if(tmp[i].c>1) A[++tot]=tmp[i],A[tot].c=1,A[++tot]=tmp[i],A[tot].c--;if(tmp[i].c>2) A[tot].c--,A[++tot]=tmp[i],A[tot].c=1;} n=tot;ans=inf,A[0].p=1,A[n+1].p=0;solve();for(int i=1;i<=(n+1)/2;i++) A[i].p=1-A[i].p,A[n-i+1].p=1-A[n-i+1].p,swap(A[i],A[n-i+1]);solve();printf("%.6LF\n",fabs(ans));} }
转载于:https://www.cnblogs.com/xiaoxubi/p/6523985.html
bzoj4030【HEOI2015】小L的白日梦相关推荐
- 洛谷U4727小L的二叉树[树转序列 LIS]
题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. 题目描述 在计算机科学中,二叉树是每个结点最多有两个子结点的 ...
- P4111 [HEOI2015]小Z的房间
P4111 [HEOI2015]小Z的房间 题目描述 详见:P4111 [HEOI2015]小Z的房间 solution Matrix-Tree裸题. 题意为求一个有障碍的网格图的生成树个数. 因此对 ...
- 1526: 小L的项链切割
原题链接:http://acm.zzuli.edu.cn/problem.php?id=1526 1526: 小L的项链切割 时间限制: 1 Sec 内存限制: 128 MB 题目描述 小T送给了小 ...
- 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(六)
目录 作者简介 作者名:王小王-123 人物简介 二十模拟题 每文一语 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙 ...
- 【NOIP模拟题】【DP】【LIS】【中缀表达式】2016.11.15 第一题 小L的二叉树 题解
小L的二叉树 小L的二叉树 题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. [题目描述] 在计算机科学中,二 ...
- 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(四)
目录 作者简介 作者名:王小王-123 人物简介 二十模拟题(含解析) 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙蓉 ...
- 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(二)
目录 作者简介 人物简介 二十模拟题(含解析) 每文一语 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙蓉,天然去雕饰& ...
- 小L的算法课堂——博弈论
嗨!这里是小L的算法课堂!我是小L 今天我们学习一下博弈论 我们先来讲一个故事: 小L和小Z喜欢玩石头剪刀布. 小L总是打不过小Z赢,于是,小L问小Z:"你是怎么赢我的?" 小Z告 ...
- 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(一)
目录 强烈推荐技术专栏: 数据炫酷可视化之模板大全 Python语法入门到精通 作者简介 人物简介 小L的烦恼和疑惑
- bzoj 4031: [HEOI2015]小Z的房间
4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1457 Solved: 736 [Submit][St ...
最新文章
- Maven国内源设置 - OSChina国内源失效了,别更新了
- 你不知道的关于计算机大师 Dijkstra 的事情
- 跟着Artech学习WCF扩展(2) 自定义Channel与执行的顺序
- Eclipse中,多参列表光标跳转至第2个参数快捷键,及其他常用快捷键
- Teams AppId, InstallationId 和 ExternalId 的区别
- 第三周作业(一)单元测试
- 前端学习(763):变量属性函数方法的区别
- C#操作Excel ExcelHelper类(Excel2007)
- [Web Chart系列之七] 物理动画效果(如撕扯效果)
- 自由度(degree of freedom)
- observer 观察者模式
- Popclip插件:任务自动添加进 Microsoft ToDo的任务列表
- RainMeter — 使用 NotePad ++ 编辑皮肤文件
- 破解Windows系统密码---利用PE系统破解
- 微信号、微信公众号、微信开放平台、微信商户、微信支付、移动应用申请流程
- 树莓派裸板linux,树莓派裸机开发步骤
- 原子互换:一统公链江湖的神来之笔
- Materials - 剑网3地形材质若干
- 编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。
- springMVC配置多数据源