[Usaco2007 Jan]Cow School牛学校

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 175  Solved: 83
[Submit][Status][Discuss]

Description

Bessy 正在上学并且分数还不错. 她考了N (一个数据中1 <= N <= 50,000, 其余数据 1 <= N <= 50,00) 次试,每次考试得分为T_i, 满分为P_i(0 <= T_i <= P_i < 40,000; 0 < P_i). 在计算总分时,她的老师先将把分数(P_i/T_i)最高的D个试卷去掉,然后将其余P_i 的和除以其余T_i的和作为Bessy的分数. Bessy精通数学,所以很快发觉这并没有想象中那么好. Bessy想告诉她的老师所有附和以下条件的D: 如果令一组(D个)分数去掉,她的分数回比老师算出来的更高. Bessy 很惊讶地发现她没有两次考试得分百分点是一样的.

Input

*第一行: N

*第2..N+1行: 第i行里有 T_i 和 P_i.

Output

* 第一行: K, 符合条件的D的个数.

*第2..K+1行: 按递增顺序,每行一个符合条件的D.

Sample Input

5
1 2
5 9
3 8
4 10
1 3

输入解释:

Bessy 考了5门试, 分数分别为1/2, 5/9, 3/8, 4/10, 1/3.

Sample Output

2
1
2
 
题解:

枚举剩下的分数个数kk,设最高的kk个分数和的分子分母分别为UU和DD。

那么在选了的里面找到A=min(Dt[x]−Up[x])A=min(Dt[x]−Up[x]),没选的里面找到B=max(Dt[x]−Up[x])B=max(Dt[x]−Up[x])。

如果A<BA<B,则可以更大。

对于A,BA,B的计算,可以利用决策单调性分治求解。

时间复杂度O(nlogn)O(nlog⁡n)。

十分优秀的思想。

 #include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio> #define ll long long
#define ls tr[p].l
#define rs tr[p].r
#define N 100007
using namespace std;
const ll inf=;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if (ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,ans,q[N];
ll f[N],g[N];
struct Node
{
int t,p;
}a[N],b[N]; inline bool cmp(Node a,Node b)
{
return a.t*b.p>b.t*a.p;
}
void getf(int l,int r,int dl,int dr)
{
int m=(l+r)>>,dm;
f[m]=inf;
for(int i=dl;i<=m&&i<=dr;i++)
{
ll t=1LL*a[i].t*b[m].p-1LL*a[i].p*b[m].t;
if(t<f[m])f[m]=t,dm=i;
}
if(l<m)getf(l,m-,dl,dm);
if(r>m)getf(m+,r,dm,dr);
}
void getg(int l,int r,int dl,int dr)
{
int m=(l+r)>>,dm;
g[m]=-inf;
for(int i=dr;i>m&&i>=dl;i--)
{
ll t=1LL*a[i].t*b[m].p-1LL*a[i].p*b[m].t;
if(t>g[m])g[m]=t,dm=i;
}
if(l<m)getg(l,m-,dl,dm);
if(r>m)getg(m+,r,dm,dr);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&a[i].t,&a[i].p);
sort(a+,a+n+,cmp);
for(int i=;i<=n;i++)
b[i].t=b[i-].t+a[i].t,b[i].p=b[i-].p+a[i].p;
getf(,n-,,n),getg(,n-,,n);
for(int i=;i<n;i++)
if(f[i]<g[i]) q[++ans]=n-i;
printf("%d\n",ans);
for(int i=ans;i;i--)
printf("%d\n",q[i]);
}

bzoj 1701 [Usaco2007 Jan]Cow School牛学校的更多相关文章

  1. BZOJ1701 : [Usaco2007 Jan]Cow School牛学校

    枚举剩下的分数个数$k$,设最高的$k$个分数和的分子分母分别为$U$和$D$. 那么在选了的里面找到$A=\min(Dt[x]-Up[x])$,没选的里面找到$B=\max(Dt[x]-Up[x]) ...

  2. BZOJ 1697: [Usaco2007 Feb]Cow Sorting牛排序

    Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序.每一头牛的脾气都是一个 ...

  3. BZOJ 1697: [Usaco2007 Feb]Cow Sorting牛排序(置换+贪心)

    题面 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序.每一头牛的脾气都 ...

  4. bzoj 1119 [POI2009]SLO && bzoj 1697 [Usaco2007 Feb]Cow Sorting牛排序——思路(置换)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1119 https://www.lydsy.com/JudgeOnline/problem.p ...

  5. bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序【置换群】

    至今都不知道置换群是个什么东西--题解说什么就是什么.jpg 以下来自hzwer:http://hzwer.com/3905.html #include<iostream> #includ ...

  6. 【BZOJ 1697】1697: [Usaco2007 Feb]Cow Sorting牛排序

    1697: [Usaco2007 Feb]Cow Sorting牛排序 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大 ...

  7. BZOJ1697: [Usaco2007 Feb]Cow Sorting牛排序

    1697: [Usaco2007 Feb]Cow Sorting牛排序 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 387  Solved: 215[S ...

  8. BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心

    BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行 ...

  9. [bzoj 3048] [Usaco2013 Jan]Cow Lineup

    [bzoj 3048] [Usaco2013 Jan]Cow Lineup Description 给你一个长度为n(1<=n<=100,000)的自然数数列,其中每一个数都小于等于10亿 ...

随机推荐

  1. Dapper系列之一:Dapper的入门(多表批量插入)

    Dapper介绍  简介:      不知道博客怎么去写去排版,查了好多相关博客,也根据自己做过项目总结,正好最近搭个微服务框架,顺便把搭建微服务框架所运用的知识都进行博客梳理,为了以后复习,就仔细琢 ...

  2. CG Shader常用函数

    为了方便自己记忆,将常用的CG函数写于此 转载于 http://www.cppblog.com/lai3d/archive/2008/10/23/64889.html Name Syntax Desc ...

  3. 批量部署Hadoop集群环境(1)

    批量部署Hadoop集群环境(1) 1. 项目简介: 前言:云火的一塌糊涂,加上自大二就跟随一位教授做大数据项目,所以很早就产生了兴趣,随着知识的积累,虚拟机已经不能满足了,这次在服务器上以生产环境来 ...

  4. 谈谈对Android中的消息机制的理解

    Android中的消息机制主要由Handler.MessageQueue.Looper三个类组成,他们的主要作用是 Handler负责发送.处理Message MessageQueue负责维护Mess ...

  5. [Tunny]Git常用命令与入门

    [黄映焜/Tunny,20140709] Git 仓库就是那个.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而实现文档的版本控制..g ...

  6. 登录脚本重构Element

    登录脚本重构Element package com.gubai.selenium; import org.openqa.selenium.By; import org.openqa.selenium. ...

  7. Hadoop 安装过程中出现的问题

    1.hadoop-daemon.sh start namenode 启动失败 查看hadoop/logs 下面的日志 出现 2017-04-11 15:35:13,860 WARN org.apach ...

  8. TensorFlow低阶API(三)—— 变量

    简介 TensorFlow变量是表示程序处理的共享持久状态的最佳方法. 我们使用tf.Variable类操作变量.tf.Variable表示可通过其运行操作来改变其值的张量.与tf.Tensor对象不 ...

  9. Asp.Net Core 入门(二)——Startup.cs做了什么

    上篇介绍了Program.cs中Main做了什么,这篇我们来讨论下Startup.cs它又做了什么呢? 我们新建一个Asp.Net Core Mvc项目,先来开一下Startup的代码 public ...

  10. 【jQuery】uploadify,实际开发案例【选择完文件点击上传才上传】

    ----------------------------------------------------------------------------------js部分:------------- ...