题意: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的白日梦相关推荐

  1. 洛谷U4727小L的二叉树[树转序列 LIS]

    题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. 题目描述 在计算机科学中,二叉树是每个结点最多有两个子结点的 ...

  2. P4111 [HEOI2015]小Z的房间

    P4111 [HEOI2015]小Z的房间 题目描述 详见:P4111 [HEOI2015]小Z的房间 solution Matrix-Tree裸题. 题意为求一个有障碍的网格图的生成树个数. 因此对 ...

  3. 1526: 小L的项链切割

    原题链接:http://acm.zzuli.edu.cn/problem.php?id=1526 1526: 小L的项链切割 时间限制: 1 Sec  内存限制: 128 MB 题目描述 小T送给了小 ...

  4. 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(六)

    目录 作者简介 作者名:王小王-123 人物简介 二十模拟题 每文一语  本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙 ...

  5. 【NOIP模拟题】【DP】【LIS】【中缀表达式】2016.11.15 第一题 小L的二叉树 题解

    小L的二叉树 小L的二叉树 题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. [题目描述] 在计算机科学中,二 ...

  6. 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(四)

    目录 作者简介 作者名:王小王-123 人物简介 二十模拟题(含解析) 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙蓉 ...

  7. 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(二)

    目录 作者简介 人物简介 二十模拟题(含解析) 每文一语 本系列文章将会以通俗易懂的聊天对话方式,进行知识点的归纳和总结,对话中涵盖了知识点的主要逻辑结构,给人一种"清水出芙蓉,天然去雕饰& ...

  8. 小L的算法课堂——博弈论

    嗨!这里是小L的算法课堂!我是小L 今天我们学习一下博弈论 我们先来讲一个故事: 小L和小Z喜欢玩石头剪刀布. 小L总是打不过小Z赢,于是,小L问小Z:"你是怎么赢我的?" 小Z告 ...

  9. 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(一)

    目录 强烈推荐技术专栏: 数据炫酷可视化之模板大全 Python语法入门到精通 作者简介 人物简介 小L的烦恼和疑惑

  10. bzoj 4031: [HEOI2015]小Z的房间

    4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 1457  Solved: 736 [Submit][St ...

最新文章

  1. Maven国内源设置 - OSChina国内源失效了,别更新了
  2. 你不知道的关于计算机大师 Dijkstra 的事情
  3. 跟着Artech学习WCF扩展(2) 自定义Channel与执行的顺序
  4. Eclipse中,多参列表光标跳转至第2个参数快捷键,及其他常用快捷键
  5. Teams AppId, InstallationId 和 ExternalId 的区别
  6. 第三周作业(一)单元测试
  7. 前端学习(763):变量属性函数方法的区别
  8. C#操作Excel ExcelHelper类(Excel2007)
  9. [Web Chart系列之七] 物理动画效果(如撕扯效果)
  10. 自由度(degree of freedom)
  11. observer 观察者模式
  12. Popclip插件:任务自动添加进 Microsoft ToDo的任务列表
  13. RainMeter — 使用 NotePad ++ 编辑皮肤文件
  14. 破解Windows系统密码---利用PE系统破解
  15. 微信号、微信公众号、微信开放平台、微信商户、微信支付、移动应用申请流程
  16. 树莓派裸板linux,树莓派裸机开发步骤
  17. 原子互换:一统公链江湖的神来之笔
  18. Materials - 剑网3地形材质若干
  19. 编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。
  20. springMVC配置多数据源

热门文章

  1. python logging 不输出控制台_Python中使用logging模块代替print(logging简明指南)
  2. bgsave配置与工作流程
  3. SpringMCV结构
  4. jQuery操作DOM节点的相关方法
  5. 【渝粤教育】国家开放大学2018年春季 8601-22T燃气工程概论 参考试题
  6. 数据预处理第5讲:特征缩放
  7. 如何准备数学建模?(附建模必备资料)
  8. 约束最优化方法 (一) 最优性条件
  9. 双系统出现grub rescue修复方法
  10. QT All Modules QT所有模块