题意: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=;
struct Node { int c; double p,w; } A[*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=,now=,sigma=k;
for(int i=n;i>=;i--) sum+=(A[i].c-)*A[i].w+(-A[i].p)*A[i+].p,sigma-=A[i].c;
for(int i=;i<=n;i++)
{
sigma-=A[i].c;
while(now<=n&&sigma<=) sum-=(A[now].c-)*A[now].w+(-A[now].p)*A[now+].p,sigma+=A[now++].c;
if(sigma<=) break; sum+=(A[i].c-)*A[i].w+(-A[i-].p)*A[i].p;
ans=min(ans,sum+(sigma-)*A[now-].w+(-A[now-].p)*A[now].p+(-A[i].p)*A[now-].p);
}
sigma=k,sum=;//初始状态
for(int i=,mn=min(sigma,A[i].c);i<=n&&mn;i++)
sigma-=mn,sum+=(mn-)*A[i].w+(-A[i-].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=,x,y;i<=n;i++)
scanf("%lld/%lld%lld",&x,&y,&tmp[i].c),tmp[i].p=(double) x/y,tmp[i].w=(-tmp[i].p)*tmp[i].p;
sort(tmp+,tmp++n,cmp); tot=;
for(int i=;i<=n;i++)//拆点
{
if(tmp[i].c==) A[++tot]=tmp[i];
if(tmp[i].c>) A[++tot]=tmp[i],A[tot].c=,A[++tot]=tmp[i],A[tot].c--;
if(tmp[i].c>) A[tot].c--,A[++tot]=tmp[i],A[tot].c=;
} n=tot;
ans=inf,A[].p=,A[n+].p=;
solve();
for(int i=;i<=(n+)/;i++) A[i].p=-A[i].p,A[n-i+].p=-A[n-i+].p,swap(A[i],A[n-i+]);
solve();
printf("%.6LF\n",fabs(ans));
}
}

bzoj4030【HEOI2015】小L的白日梦的更多相关文章

  1. 【BZOJ4030】[HEOI2015]小L的白日梦

    [BZOJ4030][HEOI2015]小L的白日梦 题面 BZOJ 洛谷 题解 要求的是最小的不开心连续段的期望. 然后发现自己就不会做了. 然后就可以来抄题解啦. 首先来猜性质: 第一个,一定是按 ...

  2. BZOJ 4030: [HEOI2015]小L的白日梦

    4030: [HEOI2015]小L的白日梦 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 172  Solved: 39[Submit][Statu ...

  3. HEOI2015小L的白日梦

    题面链接 洛咕 sol 为什么网上面只有神仙题解啊!!! 引起我这种蒟蒻不适QAQ. 性质证明留给巨佬 然后我只贴性质了QwQ. 1.一定存在最优解每一天不高兴的概率是单调不增的. 2.一定存在最优解 ...

  4. P4110 [HEOI2015]小L的白日梦

    传送门 题解 //minamoto #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef l ...

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

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

  6. ACM D的小L

    D的小L 时间限制:4000 ms  |  内存限制:65535 KB 难度:2   描述       一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给 ...

  7. bzoj 4031: [HEOI2015]小Z的房间 轮廓线dp

    4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 98  Solved: 29[Submit][Status] ...

  8. nyoj-366-D的小L(求全排列)

    D的小L 时间限制:4000 ms  |  内存限制:65535 KB 难度:2 描述       一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡 ...

  9. 洛谷U4727 小L 的二叉树

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

随机推荐

  1. Java 发送 Http请求工具类

    HttpClient.java package util; import java.io.BufferedReader; import java.io.IOException; import java ...

  2. java编程基础——从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目代码 /** * 从上往下打印出二叉树的每个节点,同层节点从左至右打印. * Created by YuKai Fan on 20 ...

  3. 循环引用问题 -- dealloc方法不执行

    dealloc不执行 如果一个类在释放过后,dealloc方法没有执行,那么就代表着这个类还被其他对象所引用,引用计数不为0,这样就造成了内存泄露 昨天其他业务线开发告知他所依赖的我这边的父类VC的- ...

  4. NopCommerce(Core)学习目录

    1.NopCommerce下载运行 2.登录及权限 3.日志 4.依赖注入使用autofac 5.插件实现 ...

  5. 可怕的万圣节 Linux 命令

    虽然现在不是万圣节,也可以关注一下 Linux 可怕的一面.什么命令可能会显示鬼.巫婆和僵尸的图像?哪个会鼓励"不给糖果就捣蛋"的精神? crypt 好吧,我们一直看到 crypt ...

  6. 服务端Latex解析成图片或者HTML或者SVG方案

    Latex公式表达式在服务端进行转换成可用数据 使用语言与扩展 node.js Mathjax (文档链接) MathJax在nodejs上解决方案 mathjax/MathJax-node(GitH ...

  7. Python学习笔记(七)加密加盐

    MD5加密和加盐 Python的MD5加密 Python的hashlib模块的MD5加密,是比较简单一种加密,md5函数必须传入编译后的结果,否则会报错: Traceback (most recent ...

  8. Python3爬取起猫眼电影实时票房信息,解决文字反爬~~~附源代码

    上文解决了起点中文网部分数字反爬的信息,详细链接https://www.cnblogs.com/aby321/p/10214123.html 本文研究另一种文字反爬的机制——猫眼电影实时票房反爬 虽然 ...

  9. (原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)

    1. Abstract function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现.因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充 ...

  10. Median of Two Sorted Arrays LeetCode Java

    两排序好的数组,找中位数 描述There are two sorted arrays A and B of size m and n respectively. Find the median of ...